您的位置:首页 > 产品设计 > UI/UE

codeforces#219_div2_B Making Sequences is Fun

2014-04-06 22:07 204 查看
题目地址: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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: