码迷,mamicode.com
首页 > 其他好文 > 详细

LightOJ - 1234 分块预处理

时间:2018-01-10 23:48:03      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:rem   clu   +=   div   预处理   处理   bit   post   i++   

求∑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 分块预处理

标签:rem   clu   +=   div   预处理   处理   bit   post   i++   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!