codeforces#219_div2_B Making Sequences is Fun

来源:互联网 发布:mac word 勾选 编辑:程序博客网 时间:2024/06/08 15:54

题目地址:cf#219_div2_B

一个很奇怪的数列求和,项数有可能特别多,但是很多相邻的都是一样的,我们一起加上去,这样就不会超时

wa了很多次因为精度,首先取出多少位数就不要用log(k)/log(10);  太容易误差了,用while() 保险。

代码:

#include<iostream>#include<cmath>#include<utility>#include<vector>#include<algorithm>using namespace std;typedef  pair<int,int> pii;typedef  long long  inta;inta mypow(inta a,int n){    inta ans=1;    for(int i=0;i<n;i++)    {        ans*=a;    }        return ans;}int main(){    inta w,m,k;        cin>>w>>m>>k;        inta all=w/k;        inta ans=0;       // int a=floor(log(m)/log(10));    int a=0;    while(mypow(10,a)<=m)    {        a++;    }    a--;        inta b=mypow(10, a+1);;         if(all<=(b-m)*(a+1))     {         //cout<<"jingqi"<<endl;         ans=all/(a+1);     }         else     {         ans=b-m;         inta cur=(b-m)*(a+1);                  int t=0;        // cout<<ans<<endl;         while(cur<all)         {             //cout<<cur<<endl;             if(all-cur<9LL*b*mypow(10,t)*(a+2+t))             {                 ans+=(all-cur)/(a+2+t);                 break;             }             else             {                ans+=9LL*b*mypow(10,t);                cur+=9LL*b*mypow(10,t)*(a+2+t);                //cout<<t<<endl;                t++;             }         }              }        cout<<ans<<endl; }


0 0
原创粉丝点击