HDU 5867 Water problem (2016 多校训练#10 1011)

来源:互联网 发布:软件购销合同书范本 编辑:程序博客网 时间:2024/06/09 20:16
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5867

题意:给一个不超过一千的数字N,求出1-N所有单词加起来的字母个数和(f(1)=len(one)=3,f(2)=f(1)+len(two)=6...)。

分析:一看名字就知道是到水题了...直接打表。(保险起见,我还手打了20内的表)。

 

代码:

#include<cstdio>#include<cmath>#include<cstring>#include<queue>#include<stack>#include<cstdlib>#include<iomanip>#include<string>#include<vector>#include<map>#include<string>#include<iostream>#include<algorithm>using namespace std;#define INF 0x3f3f3f3ftypedef long long ll;#define Max(a,b) (a>b)?a:b#define lowbit(x) x&(-x)int main(){    int a[1005]={0};    a[1]=3;    a[2]=3;    a[3]=5;    a[4]=4;    a[5]=4;    a[6]=3;    a[7]=5;    a[8]=5;    a[9]=4;    a[10]=3;    a[11]=6;    a[12]=6;    a[13]=8;    a[14]=8;    a[15]=7;    a[16]=7;    a[17]=9;    a[18]=8;    a[19]=8;    a[20]=6;    a[30]=6;    a[40]=5;    a[50]=5;    a[60]=5;    a[70]=7;    a[80]=6;    a[90]=6;    a[100]=3+7;    for(int i=20;i<100;i+=10)    {        for(int j=i+1;j<i+10;j++)            a[j]=a[i]+a[j-i];    }    for(int i=100;i<1000;i+=100)    {        a[i]=a[i/100]+7;        for(int j=i+1;j<=i+99;j++)        {            a[j]=a[i]+3+a[j-i];        }    }    a[1000]=3+8;    for(int i=2;i<=1000;i++)        a[i]+=a[i-1];    int t;    scanf("%d",&t);    while(t--)    {        int n;        scanf("%d",&n);        printf("%d\n",a[n]);    }}
View Code

 

0 0
原创粉丝点击