F题 题意寻找l到r区间中的一个数x连续子序列mod3=0的个数(1<=l<r<1e18)观察到数据范围十分的大,正常做法比如前缀和一定是不可做的,那么我们硬要暴力做第一时间想到的肯定是打表,打表后发现当x>=100答案数每次递增1,也就是每个x都满足条件,这样我们很容易得到最终结果,在赛场上我们直接算出前100个对应的数值即可,这样前缀和就可以做了,由于T数量较少更加暴力每次历遍前100个数字也可以。但是赛后我们该思考一下为什么当x>=100时x一定满足条件,在听直播时我听到一个词叫鸽笼效应然后就显然成立了(由于太菜完全联想不到),鸽笼效应的大意是假设有n+1只鸽子n个格子那么一定会有至少两只鸽子在同一个笼子里。这个道理我是懂得的,但是和这题有什么关系呢,经过我努力的思考过后,我发现x>=100的特点是x有三位数字了,由于是mod3根据同余定理我们可以将每一位数都视为0或1或2,选择0,x明显满足条件,选择三个相同的数字x也成立,那么只能选择1和2的搭配,有且只有两种选择两个1一个2或者两个2一个1那么无论如何排列都会有一个1与一个2相邻,也就满足条件(破案了),至于更多的位数只需要其中三个就一定满足条件了

#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
    int t;
    long long int l,r;
    long long int count=0;
    scanf("%d",&t);
    while(t--)
    {
        cin>>l>>r;
        count=0;
        for( long long j=l;j<=r;j++)//小细节开int会超时
        {
            if(j>=100){count+=r-j+1;break;}
            else
            {
                if(j<10&&j%3==0)count++;
                if((j%10%3==0||j/10%3==0||(j/10%3+j%10%3)%3==0)&&(j>=10))count++;
            }
        }
        cout<<count<<endl;
    }
    return 0;
}