社区讨论
WA#41求调
AT_abc347_d [ABC347D] Popcount and XOR参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lufexx4v
- 此快照首次捕获于
- 2024/03/31 19:03 2 年前
- 此快照最后确认于
- 2024/03/31 21:16 2 年前
C
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
#define int long long
int A,B,C,a[N],b[N],c[N],p[N],x,y;
signed main(){
cin>>A>>B>>C;
p[0]=1;
for(int i=1;i<=60;i++){
p[i]=p[i-1]*2;
}
int cntc=0,lenc=0,cnta=0,cntb=0,lena=0,lenb=0;
while(C>0){
if(C&1) c[++lenc]=1,cntc++;
else c[++lenc]=0;
C=C>>1;
}
if(cntc<abs(A-B)){
cout<<-1<<endl;
exit(0);
}
if((cntc-abs(A-B))&1){
cout<<-1<<endl;
exit(0);
}
int cnt=0;
for(int i=1;i<=lenc;i++){
if(c[i]==1){
if(A>B){
if(((cntc-A+B)/2+(A-B))>cnt){
a[i]=1;
b[i]=0;
cnta++;
cnt++;
}
else{
a[i]=0;
b[i]=1;
cntb++;
}
}
else{
if(((cntc-B+A)/2+(B-A))>cnt){
b[i]=1;
a[i]=0;
cntb++;
cnt++;
}
else{
b[i]=0;
a[i]=1;
cnta++;
}
}
}
}
for(int i=1;i<=lenc;i++){
if(c[i]==0){
if(cnta<A&&cntb<B){
a[i]=1;
b[i]=1;
cnta++;
cntb++;
}
else{
a[i]=0;
b[i]=0;
}
}
}
lena=lenc;
lenb=lenc;
while(cnta<A&&cntb<B){
a[++lena]=1;
b[++lenb]=1;
cnta++;
cntb++;
}
for(int i=1;i<=lena;i++){
if(a[i]==1) x=x+p[i-1];
}
for(int i=1;i<=lenb;i++){
if(b[i]==1) y=y+p[i-1];
}
/*
for(int i=lena;i>=1;i--){
cout<<a[i];
}
cout<<endl;
for(int i=lenb;i>=1;i--){
cout<<b[i];
}
cout<<endl;
*/
if(x<0||y<0){
cout<<-1<<endl;
exit(0);
}
if(x>=p[60]||y>=p[60]){
cout<<-1<<endl;
}
else cout<<x<<" "<<y<<endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...