QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#607087 | #8932. Bingo | liguo# | WA | 2ms | 11956kb | C++20 | 4.4kb | 2024-10-03 13:53:11 | 2024-10-03 13:53:12 |
Judging History
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;
}
詳細信息
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'