QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#607087#8932. Bingoliguo#WA 2ms11956kbC++204.4kb2024-10-03 13:53:112024-10-03 13:53:12

Judging History

你现在查看的是最新测评结果

  • [2024-10-03 13:53:12]
  • 评测
  • 测评结果:WA
  • 用时:2ms
  • 内存:11956kb
  • [2024-10-03 13:53:11]
  • 提交

answer

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int maxn=3e6+10;
const int mod=1e9+7;
long long read(){
	long long ans=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-') f=-1;
	 	c=getchar();
	}
	while(c>='0'&&c<='9'){
	 	ans=ans*10+c-'0';
	 	c=getchar();
	}
	return ans*f;
}
long long n,m,z,t;
char s1[maxn],s2[maxn],ans1[maxn],ans2[maxn],ans3[maxn];
int main(){
	t=read();
	while(t--){
		scanf(" %s %s",s1,s2);
		int len1=strlen(s1),len2=strlen(s2);
		if(len1<len2){
			for(int i=0;i<len2;i++) printf("%c",s2[i]);
			printf("\n");
			continue;
		}
		int al=-1,bl=0;
		for(int i=len1-len2;i>=0;i--){
			if(al<0){
				int fl=0;
				for(int j=0;j<len2;j++){
					if(s1[i+j]==s2[j]) continue;
					if(s1[i+j]<s2[j]) fl=1;
					break;
				}
				if(fl==0) continue;
				for(int j=0;j<i;j++) ans1[j]=s1[j];
				for(int j=0;j<len2;j++) ans1[j+i]=s2[j];
				for(int j=i+len2;j<len1;j++) ans1[j]='0';
				al=len1;
				for(int k=max(0,i-len2+1);k<i;k++){
					int fl=0;
					for(int j=0;j<len2;j++){
						if(s1[k+j]==s2[j]) continue;
						if(s1[k+j]<s2[j]) fl=1;
						break;
					}
					if(fl==0) continue;
					for(int j=0;j<k;j++) ans3[j]=s1[j];
					for(int j=0;j<len2;j++) ans3[j+k]=s2[j];
					for(int j=k+len2;j<len1;j++) ans3[j]='0';
					
					for(int j=0;j<al;j++){
						if(ans3[j]==ans1[j]) continue;
						if(ans3[j]<ans1[j]) fl=1;
						break;
					}
					if(!fl) continue;
					for(int j=0;j<al;j++) ans1[j]=ans3[j];
				}
				break;
			}
		}
		if(al==-1){
			if(len1==len2){
				al=len1+1;
				ans2[0]='1';
				for(int i=0;i<len2;i++) ans2[i+1]=s2[i];
				for(int i=0;i<len2;i++) ans3[i]=s2[i];
				ans3[len2]='0';
				int fl=1;
				for(int i=0;i<al;i++){
					if(ans2[i]==ans3[i]) continue;
					if(ans2[i]>ans3[i]) fl=0;
					break;
				}
				if(fl) for(int i=0;i<al;i++) ans1[i]=ans2[i];
				else for(int i=0;i<al;i++) ans1[i]=ans3[i];
			}
			else{
				al=len1;
				for(int i=0;i<len1-len2;i++) ans2[i]=s1[i];
				ans2[len1-len2-1]++;
				for(int i=len1-len2-1;i>0;i--){
					if(ans2[i]>'9'){
						ans2[i]='0';
						ans2[i-1]++;
					}
					else break;
				}
				for(int i=0;i<len2;i++) ans2[len1-len2+i]=s2[i];
				if(ans2[0]>'9'){
					al++;
					for(int i=0;i<len1;i++) ans1[i+1]=ans2[i];
					ans1[0]='1';ans1[1]='0';
				}
				else for(int i=0;i<len1;i++) ans1[i]=ans2[i];
			}
		}
		bl=len1;
		for(int i=0;i<len1;i++) ans3[i]=s1[i];
		ans3[len1-1]++;
		for(int i=len1-1;i>0;i--){
			if(ans3[i]>'9'){
				ans3[i]-=10;
				ans3[i-1]++;
			}
			else break;
		}
		if(ans3[0]>'9'){
			bl++;
			for(int i=0;i<len1;i++) ans2[i+1]=ans3[i];
			ans2[0]='1';
			ans2[1]=ans3[0]-10;
		}
		else for(int i=0;i<len1;i++) ans2[i]=ans3[i];
		for(int i=0;i<len1-len2;i++){
			int fl=0;
			for(int j=0;j<len2;j++){
				if(ans2[i+j]==s2[j]) continue;
			}
			if(!fl) continue;
			if(bl<al){
				for(int i=0;i<bl;i++) ans1[i]=ans2[i];
				al=bl;
			}
			else if(al==bl){
				int fl=0;
				for(int i=0;i<al;i++){
					if(ans1[i]==ans2[i]) continue;
					if(ans1[i]>ans2[i]) fl=1;
					break;
				}
				if(fl) for(int i=0;i<al;i++) ans1[i]=ans2[i];
			}
			break;
		}
		
		//printf("%d*\n",al);//为字串的情况,长度 以及具体值 
		//for(int i=0;i<al;i++) printf("%c",ans1[i]);
		//printf("---\n");
		m=0;n=0;bl=0;
		for(int i=0;i<len2;i++){
			m=m*10;
			m+=s2[i]-'0';
		}
		for(int i=0;i<len1;i++){
			n=n*10;
			n+=s1[i]-'0';
			n%=m;
		}
		n=m-n;
		for(int i=0;i<len1;i++) ans3[len1-1-i]=s1[i];
		bl=len1;
		for(int i=0;i<bl;i++){
			if(n){
				n+=ans3[i]-'0';
				ans3[i]='0'+(n%10);
				n=n/10;
				if(n>0&&i==bl-1){
					ans3[bl]='0';
					bl++;
				}
			}
			else break;
		}
		for(int i=0;i<bl;i++) ans2[i]=ans3[bl-1-i];
		//printf("%d*\n",bl);//为字串的情况,长度 以及具体值 
		//for(int i=0;i<bl;i++) printf("%c",ans2[i]);
		//printf("---\n");
		if(al<bl){
			for(int i=0;i<al;i++) printf("%c",ans1[i]);
			printf("\n");
		}
		else if(al>bl){
			for(int i=0;i<bl;i++) printf("%c",ans2[i]);
			printf("\n");
		}
		else{
			int fl=1;
			for(int i=0;i<al;i++){
				if(ans1[i]==ans2[i]) continue;
				if(ans1[i]>ans2[i]) fl=0;
				break;
			}
			if(fl) for(int i=0;i<al;i++) printf("%c",ans1[i]);
			else for(int i=0;i<bl;i++) printf("%c",ans2[i]);
			printf("\n");
		}
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 2ms
memory: 11956kb

input:

6
7 3
12 3
9 10
249 51
1369 37
2 1

output:

9
13
10
255
1406
3

result:

wrong answer 4th lines differ - expected: '251', found: '255'