社区讨论

溢出错误

P5657[CSP-S 2019] 格雷码参与者 3已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@logkevpt
此快照首次捕获于
2023/11/02 10:26
2 年前
此快照最后确认于
2023/11/02 10:26
2 年前
查看原帖
CPP
90pts Wa on #17#20
另外还请教一个问题:为什么在本地编译用 unsigned long long 显示
CPP
narrowing conversion of '-9223372036854775808' from 'long long int' to 'long long unsigned int' [-Wnarrowing]
而在你谷编译器上用int64_t产生了同样的结果
CPP
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
//若所求的第 k 个在前半段,那么它的答案就是 0 加上 n-1位雷格码的第 k 位的答案
//否则,后半段会是倒序,所以答案是 1 加上 n-1位雷格码的第 n-k 位的答案
ll a[70]= {1,2,4,8,16,32,64,
           128,256,512,1024,2048,4096,
           8192,16384,32768,65536,131072,262144,
           524288,1048576,2097152,4194304,8388608,16777216,
           33554432,67108864,134217728,268435456,536870912,1073741824,
           2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,
           137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,
           8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,
           562949953421312,1125899906842624,2251799813685248,4503599627370496,9007199254740992,18014398509481984,
           36028797018963968,72057594037927936,144115188075855872,288230376151711744,576460752303423488,1152921504606846976,
           2305843009213693952,4611686018427387904,9223372036854775808};
ll n,k;
void dfs(ll k,ll n){
	if(k==1){
		printf("%llu",n);
		return ;
	}
	if(n>=a[k-1]){
		printf("1");
		int nn;
		nn=n-a[k-1];
		nn=a[k-1]-nn-1;
		dfs(k-1,nn);
	}else{
		printf("0");
		dfs(k-1,n);
	}
}

int main(){
	scanf("%llu%llu",&k,&n);
	dfs(k,n);
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...