QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#829516 | #8932. Bingo | mx26 | WA | 0ms | 10092kb | C++14 | 1.8kb | 2024-12-24 10:36:39 | 2024-12-24 10:36:40 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
char s[2000005];
int a[2000005],b[2000005],bf[2000005],a1[100];
int qy(int n,int m){
long long sum=0;
for(int i=n;i;i--) sum=(sum*10+a[i])%m;
return sum;
}
int cf(int n,int m,int mi){
for(int i=1;i<=n;i++) b[i]=0;
for(int i=n,j=m;j;j--,i--) b[i]=a1[j];
for(int i=1;i<=n;i++){
b[i]-=a[i];
if(b[i]<0) b[i]+=10,b[i+1]--;
}
long long sum=0;
for(int i=n;i;i--){
sum=sum*10+b[i];
if(sum>=mi) return mi;
}
return sum;
}
int jw(int n){
for(int i=1;i<=n;i++)
if(a[i]>9){
a[i+1]+=a[i]/10,a[i]%=10;
if(i==n) n++;
}
return n;
}
bool pd(long long u,int n,int ws,int m){
long long sum=0;
for(int i=ws;i;i--) sum=sum*10+a[i];
for(int i=ws;i<=n;i++){
if(sum==m) return true;
sum=(sum+a[i+1]*u)/10;
}
return false;
}
int main(){
int uuu;scanf("%d",&uuu);
while(uuu--){
int n,m,nn;
scanf("%s%d",s+1,&m);n=strlen(s+1);
int ws=0,xx=m;while(xx) a1[++ws]=xx%10,xx/=10;
for(int i=1;i<=n;i++) a[i]=s[n-i+1]-'0';
a[1]++;n=jw(n);
for(int i=1;i<=n;i++) bf[i]=a[i],nn=n;
int mi=(m-qy(n,m))%m;
long long u=1;
for(int i=1;i<=ws;i++) u*=10;
if(pd(u,n,ws,m)) mi=0;
long long sum=0,h=1;
for(int i=1;i<=40;i++){
if(a[i]==0){h*=10;continue;}
sum=sum+h*(10-a[i]),h*=10;
if(sum>=mi) break;
a[i]=10;
for(int j=i;j<=n;j++){
if(a[j]>9){
a[j+1]+=a[j]/10,a[j]%=10;
if(j==n) n++;
}
else break;
}
if(pd(u,n,ws,m)){mi=min(mi,(int)sum);break;}
}
for(int i=1;i<=n;i++) a[i]=0;
for(int i=1;i<=nn;i++) a[i]=bf[i],bf[i]=0;n=nn;
a[1]+=mi,n=jw(n);
for(int i=n;i;i--) printf("%d",a[i]);
printf("\n");
for(int i=1;i<=n+10;i++) a[i]=b[i]=0;
for(int i=1;i<=ws+10;i++) a1[i]=0;
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 10092kb
input:
6 7 3 12 3 9 10 249 51 1369 37 2 1
output:
9 13 10 255 1370 3
result:
wrong answer 4th lines differ - expected: '251', found: '255'