SCU2016-07 N题 概率dp

来源:互联网 发布:linux私房菜 第四版 编辑:程序博客网 时间:2024/05/15 10:21

水概率dp,看数据范围那么大没想到直接分解也过了。
还有素数筛法的复杂度O(nlogn)比较优秀。

#include <iostream>#include <cstdio>using namespace std;struct jibancanyang{    double dp[112345];    void pre() {        dp[1] = 0.0;        for (int i = 2; i <= 100000; i++) {            int cnt = 2;            double sum = 0;            for (int j = 2; j * j <= i; j++) {                if (i % j == 0) {                    cnt += j * j == i ? 1 : 2;                    sum += j * j == i ? dp[j] : dp[j] + dp[i / j];                }            }            dp[i] = (sum + cnt) / (cnt - 1);            //if (i < 100) cout << dp[i] << endl;        }    }    void fun() {        pre();        int T;        scanf("%d", &T);        for (int cas = 1; cas <= T; cas++) {            int x;            scanf("%d", &x);            printf("Case %d: %.14f\n", cas, dp[x]);        }    }}ac;int main() {    freopen("in.txt", "r", stdin);    ac.fun();    return 0;}
0 0
原创粉丝点击