ABC D
  • 板块学术版
  • 楼主Konjac_C
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/30 21:41
  • 上次更新2024/3/31 00:56:05
查看原帖
ABC D
1282142
Konjac_C楼主2024/3/30 21:41

WA*5,求调

#include <bits/stdc++.h>
#define int long long
using namespace std;
int ans1[100],ans2[100],numm[100];
int qpow(int a,int b)
{
	int annn=1;
	while(b){
		if(b&1) annn*=a;
		a*=a;
		b>>=1;
	}
	return annn;
}
main()
{
	ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);
	int a,b,c;
	bool f=0;
	cin>>a>>b>>c;
	if(c==0 && (a>0 || b>1)) return cout<<-1,0;
	if(a==0 && b==0) return cout<<-1,0;
	if(a<b) f=1,swap(a,b);
	int num=c,cntt=0,cnt=0,cnt2=a-b;
	while(num){
		numm[++cntt]=num%2;
		cnt+=numm[cntt];
		num>>=1;
	}
//	for(int i=1;i<=cntt;i++) cout<<numm[i];
	if((cnt-cnt2)%2==0){
		int lg=log2(c)+1;
		int d1=(cnt-cnt2)/2,d2=(cnt-cnt2)/2+cnt2,hou=a-d2,len1=lg+a-d2,len2=lg+b-d1;
		//cout<<lg<<" "<<d1<<" "<<d2<<" "<<len1<<" "<<len2<<" "<<hou<<"\n";
		for(int i=1;i<=lg;i++){
			if(numm[i]==1 && d2){
				numm[i]=0;
				ans1[i]=1;
				d2--;
			}
			else if(numm[i]==0 && hou){
				hou--;len1--;len2--;
				ans1[i]=ans2[i]=1;
			}
		}
		//cout<<len1<<" "<<len2<<"\n";
		for(int i=lg+1;i<=len1;i++) ans1[i]=1;
		for(int i=1;i<=lg;i++){
			if(numm[i] && d1){
				ans2[i]=1;
				d1--;
			}
		}
		for(int i=lg+1;i<=len2;i++) ans2[i]=1;
		int anss1=0,anss2=0;
		for(int i=len1;i>=1;i--){
			//cout<<ans1[i];
			if(ans1[i]==1) anss1+=qpow(2,i-1);
		}
		for(int i=len2;i>=1;i--){
			if(ans2[i]==1) anss2+=qpow(2,i-1);
		}
		if(!f) cout<<anss1<<" "<<anss2<<"\n";
		else cout<<anss2<<" "<<anss1<<"\n";
	}
	else cout<<-1;
	return 0;
}


2024/3/30 21:41
加载中...