【洛谷2022】 神奇数学题
来源:互联网 发布:caffe训练googlenet 编辑:程序博客网 时间:2024/05/08 11:07
算法过程:先算出比现在小的有多少个,和之后在末尾添加能够优化的数量分别记录为cnt,p;
然后因为每多一位P*10即可。
标程来自网络单纯叙述题解的解法。
//copy 标程 特注明 #include<cstdio>#include<iostream>#include<algorithm>#define ll long longusing namespace std;ll N,M,K,cnt,base=1;ll fj[21],s[21];void get(ll x) { ll t=0; while (x){s[++t]=x%10;x/=10;base*=10;}base/=10; for (int i=1;i<=t;i++) fj[i]=s[t-i+1]; cnt+=t-1; for (int i=t;i>=1;i--) { ll sum=0; for (int j=1;j<=i;j++) if (j!=1)sum*=10,sum+=fj[j]; else sum*=10,sum+=fj[j],sum-=1; cnt+=sum; } } int main() { cin>>K>>M; get(K); if (cnt>=M||(K==base&&cnt<M-1)) {cout<<0<<endl; return 0;} ll p=K-base,c=K; //cout<<p<<" "<<cnt<<endl; for (;cnt<M-1;) { p*=10;c*=10; cnt+=p; } //cout<<K<<" "<<c<<' '<<cnt-M+2<<endl; N=max(K,c-(cnt-M+2)); cout<<N<<endl; return 0; }
}
2 0