社区讨论
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 条回复,欢迎继续交流。
正在加载回复...