社区讨论

ABC347D WA#4玄关求调

AT_abc347_d [ABC347D] Popcount and XOR参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lxabn9u1
此快照首次捕获于
2024/06/11 19:31
2 年前
此快照最后确认于
2024/06/11 19:44
2 年前
查看原帖
CPP
#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;
}

回复

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

正在加载回复...