QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#606980 | #8932. Bingo | UESTC_xxx# | WA | 0ms | 13968kb | C++14 | 3.8kb | 2024-10-03 13:25:53 | 2024-10-03 13:25:56 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstring>
#include<queue>
#include<map>
#define LL long long
using namespace std;
//const int mod=998244353;
int mod;
const int Base=23,Base2=27;
inline int lowbit(int x){return x&(-x);}
inline int Jia(int x){return x>=mod?x-mod:x;}
inline int Jian(int x){return x>=0?x:x+mod;}
int KSM(int a,int b){
int Ans=1;
while(b){
if(b&1)Ans=1LL*Ans*a%mod;
a=1LL*a*a%mod;
b>>=1;
}
return Ans;
}
inline int read(){
int k=0,ty=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')ty=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
k=k*10+ch-'0';
ch=getchar();
}
return k*ty;
}
int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
const int maxn=3e6+5;
char s[maxn];
int a[maxn],b[maxn],c[maxn],d[maxn],e[maxn],f[maxn];
int n,m;
void Print(int* z){
for(int i=z[0];i>=1;--i)cout<<z[i];
cout<<'\n';
}
void Cmp2(int *a,int *b,int *c){
int t=-1;
if(a[0]>b[0])t=0;
else if(a[0]<b[0])t=1;
else {
for(int i=a[0];i>=1;--i){
if(a[i]!=b[i]){
if(a[i]>b[i])t=0;
else t=1;
break;
}
}
}
if(t==0){
c[0]=b[0];
for(int i=1;i<=c[0];++i)c[i]=b[i];
}
else {
c[0]=a[0];
for(int i=1;i<=c[0];++i)c[i]=a[i];
}
}
void Cmp(){
int t=-1;
if(b[0]>d[0]){
t=0;
}
else if(b[0]<d[0])t=1;
else {
for(int i=b[0];i>=1;--i){
if(b[i]>d[i]){
t=0;
break;
}
if(b[i]<d[i]){
t=1;
break;
}
}
}
if(t==0){
for(int i=d[0];i>=1;--i)cout<<d[i];
cout<<'\n';
}
else {
for(int i=b[0];i>=1;--i)cout<<b[i];
cout<<'\n';
}
return;
}
bool Check(int l,int r){
for(int i=1;i<=a[0]+1;++i)e[i]=0;
e[1]=1;
int flag=0;
for(int i=1;i<=a[0];++i){
e[i]+=a[i];
if(e[i]>=10){
e[i+1]+=1;
e[i]-=10;
}
if(l<=i&&i<=r&&e[i]!=a[i])flag=1;
// else break;
}
if(flag)return false;
d[0]=a[0];
for(int i=1;i<=a[0];++i){
d[i]=e[i];
}
// cout<<"fff4\n"<<'\n';
// Print(d);
Cmp();
return true;
}
void Solve(){
scanf("%s",s+1);
m=read();n=strlen(s+1);
a[0]=n;
for(int i=1;i<=n;++i)a[i]=s[n-i+1]-'0';
f[0]=1;
for(int i=1;i<=n;++i)f[i]=(f[i-1]&&(a[i]==9));
int k=0,flag=0;
LL z=0;
for(int i=1;i<=n;++i){
if(!flag){
z=z*10+a[n-i+1];
if(z>=m){
flag=1;
}
}
k=(k*10+a[n-i+1])%m;
}
if(!flag){
cout<<m<<'\n';
return;
}
// cout<<"fff1\n";
k=m-k;
int kk=k;b[0]=0;
while(kk){
b[++b[0]]=kk%10;
kk/=10;
}
kk=max(b[0],n);
for(int i=b[0]+1;i<=kk+1;++i)b[i]=0;
for(int i=n+1;i<=kk+1;++i)a[i]=0;
for(int i=1;i<=kk;++i){
b[i]+=a[i];
b[i+1]+=b[i]/10;
b[i]%=10;
}
if(b[kk+1])++kk;
b[0]=kk;
// Print(b);
kk=m;c[0]=0;
while(kk){
c[++c[0]]=kk%10;
kk/=10;
}
k=0;
int BB=1;
for(int i=c[0];i>=1;--i){
k=k*10+a[i];
}
// cout<<k<<'\n';
for(int i=1;i<c[0];++i)BB*=10;
for(int i=c[0];i<=a[0]&&i-c[0]<=20;++i){
// cout<<k<<'\n';
if(k<m){
for(int j=a[0];j>i;--j)d[j]=a[j];
for(int j=c[0];j>=1;--j)d[i-c[0]+j]=c[j];
for(int j=i-c[0];j>=1;--j)d[j]=0;
d[0]=a[0];
// cout<<"fff2\n";
// Cmp();
// return;
Cmp2(b,d,b);
// break;
}
else if(k>m){
for(int j=c[0];j>=1;--j)d[i-c[0]+j]=c[j];
for(int j=i-c[0];j>=1;--j)d[j]=0;
for(int j=c[0]+1;j<=a[0];++j)d[j]=0;
d[c[0]+1]=1;d[d[0]+1]=0;
for(int j=c[0]+1;j<=a[0];++j){
d[j]+=a[j];
d[j+1]+=d[j]/10;
d[j]%=10;
}
if(d[d[0]+1])++d[0];
Cmp2(b,d,b);
}
k=(k-a[i-c[0]+1])/10+a[i+1]*BB;
}
k=0;
for(int i=c[0];i>=1;--i){
k=k*10+a[i];
}
for(int i=c[0];i<=a[0];++i){
if(k==m){
if(Check(i-c[0]+1,i)&&!f[i-c[0]])return;
}
k=(k-a[i-c[0]+1])/10+a[i+1]*BB;
}
Cmp();
return;
}
int main(){
int T=read();
while(T--)Solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 13968kb
input:
6 7 3 12 3 9 10 249 51 1369 37 2 1
output:
13 10 251 1370 3
result:
wrong answer 1st lines differ - expected: '9', found: ''