QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#666092 | #8932. Bingo | lytqwq# | WA | 0ms | 11820kb | C++14 | 3.9kb | 2024-10-22 16:34:28 | 2024-10-22 16:34:38 |
Judging History
answer
#include<stdio.h>
#include<string.h>
int minn(int x,int y){return x<y?x:y;}
int maxx(int x,int y){return x>y?x:y;}
#define N 1000010
#define ll long long
char ch[N];
long long m;
int a[N],lena;
int b[N],lenb;
int d[N],lend;
int c[N],lenc;
int e[N],lene;
int f[N],lenf;
int main(){
// freopen("2.in","r",stdin);
int t;scanf("%d",&t);
while(t--){
scanf("%s%lld",ch+1,&m);
ll p=m;
lend=0;
while(p){
d[++lend]=p%10;
p/=10;
}
lena=strlen(ch+1);
for(int i=1;i<=lena;i++)a[i]=ch[lena-i+1]-'0';
a[lena+1]=0;
if(lena<=18){
p=0;
for(int i=lena;i>=1;i--)p=p*10+a[i];
if(p<m){
// printf("!%lld %lld\n",p,m);
printf("%lld\n",m);
continue;
}
}
long long yu=0;
for(int i=lena;i>0;i--){
yu=yu*10+a[i];
yu%=m;
}
lenb=lena;
for(int i=1;i<=lenb;i++){
b[i]=a[i];
}
// printf("!%lld\n",yu);
int jw=(m-yu);
int ti=1;
while(a[ti]==9)ti++;
ti++;
for(int i=ti;i+lend-1<=lenb;i++){
int flag=1;
for(int j=lend;j>=1;j--){
if(d[j]!=a[i-1+j]){
flag=0;
break;
}
}
if(flag){
jw=1;
break;
}
}
for(int i=1;i<=lenb;i++){
b[i]+=jw;
jw=b[i]/10;
b[i]%=10;
}
while(jw){
++lenb;
b[lenb]=jw;
jw=b[lenb]/10;
b[lenb]%=10;
}
for(int i=lena+1;i<=lenb;i++){
a[i]=0;
}
pwp:
// for(int i=lenb;i>=1;i--)putchar(b[i]+'0');
// puts("");
int fid=0;
for(int i=lenb;i>=1;i--){
if(a[i]<b[i]){
fid=i;
break;
}
}
// printf("P%d\n",fid);
for(int i=1;i<=lenb;i++)c[i]=a[i];
int flagc=0;
// for(int i=lenb;i>=1;i--)putchar(b[i]+'0');
// puts("");
int maxl=lenb;
for(int i=1;i+lend-1<=lenb&&i<=maxl;i++){
int flag=1;
for(int j=lend;j>0;j--){
if(j==0){
flag=0;break;
}
if(d[j]>a[i-1+j])break;
if(d[j]<a[i-1+j]){
flag=0;
break;
}
}
if(flag&&i+lend-1>=fid){
for(int j=lend;j>=0;j--){
if(j==0){
// printf("=%d\n",i);
int cp=1;
for(int h=1;h<i;h++)if(b[h]!=0){
cp=0;break;
}
if(cp){
flag=0;
}
break;
}
if(d[j]>b[i-1+j]){
flag=0;
break;
}
if(d[j]<b[i-1+j])break;
}
}
if(flag){
// printf("gai%d\n",i);
flagc=1;
for(int j=1;j<=lena;j++)b[j]=a[j];
lenb=lena;
for(int j=lend;j>=1;j--)
b[i-1+j]=d[j];
for(int j=0;j<i;j++)b[j]=0;
//break;
goto pwp;
}
}
// puts("ans");
// if(flagc){
// for(int i=lena;i>=1;i--)putchar(a[i]+'0');
// }else{
while(lenb>0&&b[lenb]==0)lenb--;
for(int i=lenb;i>=1;i--)putchar(b[i]+'0');
// }
// puts("");
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 11820kb
input:
6 7 3 12 3 9 10 249 51 1369 37 2 1
output:
91310 25113703
result:
wrong answer 1st lines differ - expected: '9', found: '91310'