专栏文章

题解 CF2039C1

CF2039C1题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqw0t1j
此快照首次捕获于
2025/12/04 11:39
3 个月前
此快照最后确认于
2025/12/04 11:39
3 个月前
查看原文

题意:

在区间 [1,m][1,m] 中,有多少个数 yy 使得 xyx\oplus yxxyy 的因数。

思路:

发现 xx 的范围并不大。而且我们有一个显而易见的性质:当 x0x\neq0yy 的二进制最高位大于 xx 时,xyx\oplus y 一定大于 xx 且小于 y×2y\times 2(当然也不会等于 yy),条件不可能满足。
因此,只需要枚举 11x×2x\times 2 的所有数,判断是否满足条件即可。

程序如下:

CPP
#include<cstdio>
#include<vector>
using namespace std;
const int N=5e5+5;
int T;
int main(){
	scanf("%d",&T);
	while(T--){
		int x,ans=0;
		long long m;
		scanf("%d%lld",&x,&m);
		for(int i=1;i<=m&&i<=(x<<1);i++){
			if(i==x)continue;
			int res=x^i;
			if(i%res==0||x%res==0)ans++;
		}
		printf("%d\n",ans);
	}
	return 0;
}

THE END

评论

0 条评论,欢迎与作者交流。

正在加载评论...