90分,#3WA,不知道错在哪里了?
查看原帖
90分,#3WA,不知道错在哪里了?
1070708
Caged_Bird楼主2024/1/6 23:23
#include<bits/stdc++.h>
using namespace std;
char c1[40],c2[40],c[40]; 
__int128 n1;
int to_ten(__int128 x){
	__int128 t=0;
	int i=0;
	while(x>0){
		t+=(x%10)*pow(2,i);
		i++;
		x/=10;
	}
	return t;
}
__int128 to_three(int x){
	int p[40]={0},i=0;
	__int128 t=0;
	while(x>0){
		i++;
		p[i]=x%3;
		x/=3;
	}
	for(;i>=1;i--){
		t=t*10+p[i];
	}
	return t;
}
int log10(__int128 x){
	int k=-1;
	while(x>0){
		x/=10;
		k++;
	}
	return k;
}
//inline void print(__int128 n){
//    if(n>9) print(n/10);
//    putchar(n%10+'0');
//}
int main(){
	cin>>c1>>c2;
	for(int i=0;i<strlen(c1);i++){
		if(c1[i]=='1')c1[i]='0';
		else c1[i]='1';
		n1=0;
		for(int j=0;j<strlen(c1);j++){
			n1=n1*10+c1[j]-'0';
		}
//		print(n1);
//		cout<<endl;
		int v=to_ten(n1);
//		cout<<v<<endl;
		__int128 y=to_three(v);
//		print(y);
//		cout<<endl;
		int k=log10(y);
		while(y>0){
			c[k]=char(y%10+'0');
			k--;
			y/=10;
		}
//		cout<<strlen(c)<<' '<<strlen(c2);
//		for(int m=0;m<=3;m++)cout<<c[m]<<' ';
//		cout<<endl;
		int flag=0,fail=0;
		if(strlen(c)!=strlen(c2))goto tiaoguo;
		for(int l=0;l<strlen(c)&&l<strlen(c2);l++){
			if(flag==1&&c[l]!=c2[l]){
				fail=1;
				break;
			}
			else if(c[l]!=c2[l])flag=1;
			//cout<<flag<<endl;
		}
		if(fail==0){cout<<v;return 0;}
		tiaoguo:
		if(c1[i]=='1')c1[i]='0';
		else c1[i]='1';
	}
	return 0;
}

注释中是我的调试代码 测评记录

2024/1/6 23:23
加载中...