社区讨论

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 条回复,欢迎继续交流。

正在加载回复...