help
查看原帖
help
1281623
Problem1613end楼主2024/10/2 19:18
#include<bits/stdc++.h>
using namespace std;
#define ll long long
string r,c;
ll s1[100100],s2[100100],s3[100100],s4[100100],ans[10010000],s5[10010000];
ll w1,w2,w3,w4,w5,w6;
void cf(){
	ll dq=0;
	for(int i=w5;i>=1;i--){
		dq*=10;
		dq+=s5[i];
		if(dq>=12){
			ans[i]=dq/12;
		}
		dq%=12;
	}
	if(dq!=0) cout<<"WA";
	return;
}
bool big(string at,string bt){
	int a=at.length();
	int b=bt.length();
	if(a>b) return true;
	if(b<a) return false;
	for(int i=0;i<a;i++){
		if(at[i]>bt[i]) return true;
		else if(bt[i]>at[i]) return false;
	}
	return false;
}
void print(){
	w6=w5;
	while(1){
		if(w6!=0 && ans[w6]==0){
			w6--;
		}
		else break;
	}
	if(w6==0) cout<<0;
	for(int i=w6;i>=1;i--){
		cout<<ans[i];
	}
	cout<<" "<<0;
	return;
}
void cl(){
	for(int i=1;i<=w6;i++){
		if(ans[i]>=10){
			ans[i+1]=(ans[i]/10)+ans[i+1];
			if(i==w6) w6++;
			ans[i]%=10;
		}
	}
}
void cop(){
	w5=w6;
	for(int i=1;i<=w6;i++){
		s5[i]=ans[i];
		ans[i]=0;
	}
}
void an1(){
	w5=w1;
	for(int i=1;i<=w1;i++){
		s5[i]=s1[i];
	}
	for(int i=1;i<=w5;i++){
		for(int j=1;j<=w2;j++){
			ans[i+j-1]=ans[i+j-1]+(s2[j]*s5[i]);
		}
	}
	w6=w5+w1+1000;
	cl();
	cop();
	for(int i=1;i<=w5;i++){
		for(int j=1;j<=w3;j++){
			ans[i+j-1]=ans[i+j-1]+(s3[j]*s5[i]);
		}
	}
	w6=w5+w3+1000;
	cl();
	cop();
	for(int i=1;i<=w5;i++){
		for(int j=1;j<=w4;j++){
			ans[i+j-1]=ans[i+j-1]+(s4[j]*s5[i]);
		}
	}
	w6=w5+w4+1000;
	cl();
	cop();
}
void cl2(){
	for(int i=1;i<=w2;i++){
		if(s2[i]>=10){
			s2[i+1]=(s2[i]/10)+s2[i+1];
			if(i==w2) w2++;
			s2[i]%=10;
		}
	}
}
void cl3(){
	for(int i=1;i<=w3;i++){
		if(s3[i]>=10){
			s3[i+1]=(s3[i]/10)+s3[i+1];
			if(i==w3) w3++;
			s3[i]%=10;
		}
	}
}
void cl4(){
	for(int i=1;i<=w4;i++){
		if(s4[i]>=10){
			s4[i+1]=(s4[i]/10)+s4[i+1];
			if(i==w4) w4++;
			s4[i]%=10;
		}
	}
}
void fcl4(){
	for(int i=1;i<=w4+1000;i++){
		if(s4[i]<0){
			s4[i+1]=s4[i+1]-(abs(s4[i])/10);
			if(abs(s4[i])%10==0){
				s4[i]=0;
			}
			else{
				s4[i+1]--;
				s4[i]=s4[i]+((abs(s4[i])/10)*10)+10;
			}
		}	
	}
}
int main(){
	cin>>r>>c;
	if(big(c,r)) swap(r,c);
	w1=c.length();
	for(int i=0;i<w1;i++){
		s1[i+1]=c[w1-i-1]-'0';
		s2[i+1]=c[w1-i-1]-'0';
		s3[i+1]=c[w1-i-1]-'0';
	}
	s2[1]++;
	s3[1]++;
	s3[1]++;
	w4=r.length();
	for(int i=0;i<w4;i++){
		s4[i+1]=(r[w4-i-1]-'0')*2;
	}
	w2=c.length();
	w3=c.length();
	cl2();
	cl3();
	cl4();
	for(int i=1;i<=w1;i++){
		s4[i]-=s1[i];
	}
	fcl4();
	s4[1]++;
	cl4();
	an1();
	cf();
	print();
	return 0;
}
2024/10/2 19:18
加载中...