只WA最后一个点,是-1的情况没判断对
查看原帖
只WA最后一个点,是-1的情况没判断对
758472
for_cat楼主2024/3/31 17:02
#include <iostream>
using namespace std;
const int N=65;
long long k[N];
long long d[N];
long long e[N];
long long jc[N];
int main(){
	jc[0]=1;
	for(int i=1;i<=62;i++){
		jc[i]=jc[i-1]*2;
	} 
	long long a,b;
	cin>>a>>b;
	long long c;
	cin>>c;
	long long cnt=0;
	long long ct=0; 
	for(int i=0;i<=60;i++){
		if((c>>i)&1){
			cnt++;
			k[i]=1; 
			ct=i+1;
		}
	}
	int z=0;
	for(int i=0;i<=60;i++){
		if(cnt+2*i==a+b){
			z=i;
			break;
		}
	}
	//cout<<cnt<<' '<<z<<' '<<ct<<"*\n"; 
	if((z==0&&a+b!=cnt)||z>a||z>b){
		cout<<"-1";
		return 0;
	}
	int ansz=0;
	for(int i=0;i<=cnt;i++){
		if(z+i==a){
			ansz=i;
			break;
		}
	}
	int cntt=0;
	int zz=0;
	for(int i=0;i<=60;i++){
		if(cntt>=ansz){
			zz=i;
			break;
		}
		if(k[i]==1){
			cntt++;
			d[i]++;
		}
	}
	for(int i=0;i<=60;i++){
		if(k[i]==1&&d[i]==0){
			cntt++;
			e[i]++;
		}
	}
	int xxx=0;
	for(int i=0;i<=60;i++){
		if(xxx>=z){
			break;
		}
		if(k[i]==0){
			d[i]=1;
			e[i]=1;
			xxx++;
		}
	}
	long long aaa=0;
	long long bbb=0;
	for(int i=0;i<=60;i++){
		aaa+=jc[i]*d[i];
		bbb+=jc[i]*e[i];
	}
	cout<<aaa<<' '<<bbb;
	return 0;
}
2024/3/31 17:02
加载中...