hdu 1099 Lottery

来源:互联网 发布:蓝牙鼠标 50 知乎 编辑:程序博客网 时间:2024/05/01 11:48

hdu   1099    Lottery           题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1099

题目大意:大概是计算买彩票中奖期望的问题。要想知道具体让你算什么,分析一下样例很容易出。就是让你算一分之N+二分之N+三分之N+……N分之N用带分数形式表示。

题目分析:模拟分数运算,分子分母先分别存,再通过gcd、lcm之类的算,格式好像坑了不少人,稍作注意即可。

code:

#include<stdio.h>long long gcd(long long a,long long b){    return (b>0)?gcd(b,a%b):a;}long long rfacd(long long*n,long long len){//通分    long long lcm=*n,i;    for(i=1;i<len;i++)    {        lcm*=n[i]/gcd(lcm,n[i]);    }    return lcm;}int main(){    long long i,j,lcm,n,ints,gdp[30],debt[30],debtsum,bcints;    while(scanf("%I64d",&n)!=EOF)    //for(n=1;n<23;n++)    {        if(n==1)printf("1\n");        else if(n==2)printf("3\n");        else        {            ints=n+1;            for(j=0,i=2;i<n;i++)            {                if(n%i)gdp[j]=i,debt[j++]=n;                else ints+=n/i;            }            lcm=rfacd(gdp,j);            for(debtsum=i=0;i<j;i++)            {                debtsum+=lcm/gdp[i]*n;            }            ints+=debtsum/lcm;            debtsum%=lcm;            long long GCD=gcd(debtsum,lcm);            debtsum/=GCD;            lcm/=GCD;            for(bcints=0,j=ints;j>0;j/=10)            {                bcints++;                putchar(' ');            }            printf(" %I64d\n%I64d ",debtsum,ints);            for(i=lcm;i>0;i/=10)            {                putchar('-');            }            putchar('\n');            for(i=0;i<bcints;i++)            {                putchar(' ');            }            printf(" %lld\n",lcm);        }    }    return 0;}/*13  15 -  2  18 -  3   511 --   12   714 --   10   318 --   20   2621 --   35   12925 ---   280   7329 ---   252   55133 ----   2520   55137 ----   2310   947341 -----   27720   1343345 -----   25740   1858149 -----   24024   412954 -----   45045   34046358 ------   720720   62074362 ------   680680   166243967 -------   4084080   370447971 -------   3879876   40833576 ------   739024   4653381 ------   235144*/

PS:实在智商着技的话暴力输出也可以的呀偷笑

PSS:我这种做法只能用long long(又遇到以前那种坑跌现象了)……有人只用int也过了,给跪






0 0
原创粉丝点击