首页 > 其他 > 详细

LightOJ - 1234 分块预处理

时间:2018-01-10 23:27:42      阅读:248      评论:0      收藏:0      [点我收藏+]

求∑1/i,但是范围很大
和bitmap的想法一样,分个块,均摊复杂度就降下来了
//到底排行榜上的0ms是怎么做到的?

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+11;
const int N = 1e8;
double tmp[N/128+7];
int main(){
    double t=0;
    for(int i = 1; i <= N; i++){
        t+=(double)1/i;
        if(i%128==0) tmp[i/128]=t;
    }
    int T,kase=0; scanf("%d",&T);
    while(T--){
        int n; scanf("%d",&n);
        int divi=n/128,remi=n%128;
        double ans=tmp[divi];
        for(int i = 1; i <= remi; i++){
            ans+=(double)1/(divi*128+i);
        }
        printf("Case %d: %.10lf\n",++kase,ans);
    }
    return 0;
}

LightOJ - 1234 分块预处理

原文:https://www.cnblogs.com/caturra/p/8261259.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!