codeforces#373B.Making Sequences is Fun

来源:互联网 发布:php彩票门户网站源码 编辑:程序博客网 时间:2024/06/08 09:59

题目链接:传送门
题意:给w,m,k,d(n)表示n这个数是几位数,w为总量,k为单个花费
从m开始如果的d(m)*k的花费小于w,则w减去这些花费,新的序列加入m
然后m+1,m+2…直到总量用完,求出序列的数的个数
做法就是求出m离10^(d(m))的花费能不能用完,能用完直接更新len,m更新到10^(d(m)),然后继续。
这题被套了,就是在判断花费的时候的乘法会爆longlong,所以判断里面要变成除法
代码如下:

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 10010int d(long long int n){    int len=0;    while(n){        n/=10;        len++;    }    return len;}long long int Pow(int a,int b){    long long int r=1,base=a;    while(b){        if(b&1) r*=base;        base*=base;        b/=2;    }    return r;}int main(){    long long int w,m;    int k;    cin>>w>>m>>k;       int x=d(m);      long long int len=0;     while(w){            long long int y=Pow(10,x)-m;       if(y<=(w/k)/x){        w-=(long long)y*k*x;        len+=y;        m=Pow(10,x);        x=d(m);       }        else{            len+=(w/k)/x;         w=0;        }      }    cout<<len<<endl;    return 0;}
0 0
原创粉丝点击