Find 3-friendly Integers
题意:
定义一个自然数是精妙的,如果他存在一个字串(允许前导0)是3的倍数
问L到R中精妙的数的个数
题解:
数位dp可以做(但我不会。。。)
用结论来做,当n>=100时(即为3位数时)必然是精妙的数,这样只需要对<100的暴力即可。这样想,对于每一位mod3,也就是每一位是0/1/2中的一个,如果是0直接合法,也就是剩下3位中分别选1/2,怎么都会有和为3倍数的情况
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int T;
long long L,R;
int main()
{cin>>T;for(int k=1;k<=T;k++){cin>>L>>R;if(L>=100) cout<<R-L+1<<endl;else{if(R<100){int sum=0;for(int i=L;i<=R;i++){if(i%3==0) {sum++;continue;}else{if(i>=10){if((i/10)%3==0||(i%10)%3==0){sum++;continue;}}}}cout<<sum<<endl;}else{long long sum=0;sum+=R-100+1;for(int i=L;i<100;i++){if(i%3==0) {sum++;continue;}else if(i>=10){if((i/10)%3==0||(i%10)%3==0){sum++;continue;}}}cout<<sum<<endl;}}}return 0;
}