ABC347D WA#4玄关求调
查看原帖
ABC347D WA#4玄关求调
877691
MorLeaves楼主2024/6/11 19:30
#include<iostream>
#include<cstdio>
typedef long long ll;
using namespace std;
ll a,b,c,d,cnt=0,x[114514],y[114514],k=0,n=0,m=0,s=0,cnt1=0,cnt2=0;
int main() {
	scanf("%lld %lld %lld",&a,&b,&c);
	d=max(a,b)-min(a,b);
	while(c) {
		cnt+=c%2;
		k++;
		x[k]=c%2;
		c>>=1;
	}
	if ((cnt+d)%2==1) {
		printf("-1");
		return 0;
	}
	ll u=(cnt+d)/2,v=cnt-u;
	if (v<0) {
		printf("-1");
		return 0;
	}
	if (a<b) swap(u,v);
	for(ll i=1;i<=k;i++) {
		if (x[i]==1) {
			s++;
			if (s<=u) {
				cnt1++;
				n+=(1ll<<(i-1));
			}
			else {
				cnt2++;
				m+=(1ll<<(i-1));
			}
		}
		else {
			if (cnt1<a&&cnt2<b) {
				cnt1++;
				cnt2++;
				n+=(1ll<<(i-1));
				m+=(1ll<<(i-1));
			}
		}
	}
	if (k+a-cnt1-1>59||k+b-cnt2-1>59) {
		printf("-1");
		return 0;
	}
	for(ll i=k+1;i<=k+a-cnt1;i++) n+=1ll<<(i-1);
	for(ll i=k+1;i<=k+b-cnt2;i++) m+=1ll<<(i-1);
	printf("%lld %lld",n,m);
	return 0;
}
2024/6/11 19:30
加载中...