2020牛客多校第八场By Rynar

A.All-Star Game

B.Bon Voyage

C.Cinema

D.Disgusting Relationship

E.Enigmatic Partition

思路:
先找规律,对于每个a1和m的大小(am=a1+2),都有如图的个数

差分

如图消去

再进行一边差分,如图为二次的隔项的差分

typedef long long ll;
const int N=1e6+10;
int n,m,k;
ll f[N];
signed main(){
    int T;
    for(int i=1;i<=100000;++i){//枚举a1的大小 am=a1+2
        for(int j=3;i*j<=100000;++j){//a1...am 枚举m的大小
            f[i*j+3]++;f[(i+1)*j+1]--;
            f[(i+1)*j+2]--;f[(i+2)*j-3+3]++;
        }
    }
    for(int i=2;i<=100000;i++)f[i]+=f[i-2];//隔项差分
    for(int i=1;i<=100000;i++)f[i]+=f[i-1];//差分
    for(int i=1;i<=100000;i++)f[i]+=f[i-1];//前缀和
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++){
        int l,r;
        scanf("%d%d",&l,&r);
        printf("Case #%d: %lld\n",cas,f[r]-f[l-1]);
    }
    return 0;
}

F.Factorio

G.Game SET

H.Hard String Problem

I.Interesting Computer Game

J.Jumping Points

K.Kabaleo Lite

posted @ 2020-08-04 00:18  Rynar  阅读(373)  评论(0编辑  收藏  举报