HDU 5879 Cure -2016 ICPC 青岛赛区网络赛

题目链接

题意:给定一个数n,求1到n中的每一项的平方分之一的累加和。

题解:题目没有给数据范围,而实际上n很大很大超过long long。因为题目只要求输出五位小数,我们发现当数大到一定程度时值是固定的 pi*pi/6。小的打表就行了,这里打表为了防止爆内存我用了优化的方法,类似于我之前写的 light oj 1234

 

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <cstring>
const int N=1e7+10;
using namespace std;
const double pi=acos(-1);
double a[N/50+10];
char c[1000005];
int main()
{
    int i,t,k=1;
    long long n;
    double cnt=pi*pi/6.0;
    double sum=1.0;
    a[0]=0.0;
    a[1]=1.0;
    for(i=2;i<=N;i++)
    {
        sum+=1.0/(double(i)*double(i));
        if(i%50==0)
        a[i/50]=sum;
    }
    while(scanf("%s",c)!=EOF)
    {
        int len=strlen(c);
        if(len>=7) printf("%.5f\n",cnt);
        else
        {
            n=0;
            for(int i=0;i<len;i++)
            n=n*10+(c[i]-'0');
            //cout<<n<<"****"<<endl;
            long long b=n/50;
            double ans=a[b];
            for(i=b*50+1;i<=n;i++)
            ans+=1.0/(double(i)*double(i));
            printf("%.5f\n",ans);
        }
    }
    return 0;
}

 

posted @ 2016-09-19 20:43  Ritchie丶  阅读(272)  评论(0编辑  收藏  举报