【洛谷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
原创粉丝点击