50/55pts
查看原帖
50/55pts
407380
35wZ3S楼主2022/10/25 13:53

情况比较复杂

这个代码是55pts

#include<iostream>
using namespace std;
typedef unsigned long long llu;
llu m[64]={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};
llu n,k,ca;
int main(){
	cin>>n>>k;
	int i;
	for(i=n-1;i>=0;i--){
		if(k>=m[i]){      //换成if(k>m[i])
			cout<<1;
			k-=m[i];
			k=m[i]-k;
		}
		else{
			cout<<0;
		}
	}
	return 0;
}

但是只要把for下面的if(k>=m[i])里的等于号删掉

就会变成55pts

前一个if(k>=m[i])会过1,3,5,7,8,10,11,13,15,16这几个点

后一个if(k>m[i])会过2,4,6,9,10,12,14,17,18,19,20

只有个样例10都过去了,其他完全互补

这是为什么啊?

2022/10/25 13:53
加载中...