专栏文章
P12828 「DLESS-2」XOR and Number Theory 题解
P12828题解参与者 3已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mip3bllv
- 此快照首次捕获于
- 2025/12/03 05:28 3 个月前
- 此快照最后确认于
- 2025/12/03 05:28 3 个月前
神秘复杂度水过了。
先来看这个 ,也就是 ,我们发现对于一个 ,。但是 所以 至少是 ,因此 ,此时若 ,则一定有 。
在看这个神秘的一看就是凑出来的条件,将 换成 , 换成 得到:
贡献全都是 ,问题变成对每个 求有多少个 使得 ,其中 是按位与。
我想过先 枚举后面几位,但是由于我不会数论,所以后面不会 求就有点寄,所以可以考虑一些神秘的暴力。
显然有直接暴力,对于一个 是 的。
然后 小的时候可以发现后面几位是有周期的,就可以记一下最后几位每一个状态是否被访问过,如果出现周期直接计算即可。复杂度 。
合起来就是 。居然可以通过。虽然 再大一点就直接死了。
CPPinline void Solve(){
rd(n,m);
int ans=0;
for(int d=1;d<B&&d<=m;d++){
bt.reset();
int cnt=0;
for(int i=d,c=1;i+d<=n;i+=d,++c){
int k=i&(B-1);
if(bt[k]){
--c;
cnt+=((n-d)/d/c-1)*s[c]+s[((n-d)/d)%c];
break;
}
bt[k]=1;
s[c]=s[c-1];
if((i&d)==0)++cnt,++s[c];
}
Add(ans,1ll*cnt*d%mod*d%mod);
}
for(int d=B;d<=m;d++){
int cnt=0;
for(int i=d;i+d<=n;i+=d)
if((i&d)==0)++cnt;
Add(ans,1ll*cnt*d%mod*d%mod);
}
printf("%d\n",ans);
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...