zoukankan      html  css  js  c++  java
  • 【Uva11762】Race to 1

    模拟马尔可夫过程,具体看书。

    #include<bits/stdc++.h>
    #define N 1000010
    using namespace std;
    int prime[N],use[N],cnt=0;
    void calcprime(){
        cnt=0;memset(use,1,sizeof(use));
        for(int i=2;i<=N;i++){
            if(use[i]){prime[++cnt]=i;}
            for(int j=1;j<=cnt;j++){
                int t=prime[j]*i;if(t>N)break;
                use[t]=0;
                if(i%prime[j]==0)break;
            }
        }
    }
    bool vis[N];double f[N];
    double dfs(int x){
        if(x==1)return 0.0;if(vis[x])return f[x];
        vis[x]=1;double &ans=f[x];
        int g=0,p=0;ans=0;
        for(int j=1;j<=cnt;j++){
            if(prime[j]>x)break;++p;
            if(x%prime[j]==0){g++;ans+=(dfs(x/prime[j]));}
        }
        ans=(ans+p)/g;return ans;
    }
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        calcprime();int T=read();
        for(int t=1;t<=T;t++){
            printf("Case %d: %.10lf
    ",t,dfs(read()));
        }
        return 0;
    }#include<bits/stdc++.h>
    #define N 1000010
    using namespace std;
    int prime[N],use[N],cnt=0;
    void calcprime(){
        cnt=0;memset(use,1,sizeof(use));
        for(int i=2;i<=N;i++){
            if(use[i]){prime[++cnt]=i;}
            for(int j=1;j<=cnt;j++){
                int t=prime[j]*i;if(t>N)break;
                use[t]=0;
                if(i%prime[j]==0)break;
            }
        }
    }
    bool vis[N];double f[N];
    double dfs(int x){
        if(x==1)return 0.0;if(vis[x])return f[x];
        vis[x]=1;double &ans=f[x];
        int g=0,p=0;ans=0;
        for(int j=1;j<=cnt;j++){
            if(prime[j]>x)break;++p;
            if(x%prime[j]==0){g++;ans+=(dfs(x/prime[j]));}
        }
        ans=(ans+p)/g;return ans;
    }
    inline int read(){
        int f=1,x=0;char ch;
        do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
        do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
        return f*x;
    }
    int main(){
        calcprime();int T=read();
        for(int t=1;t<=T;t++){
            printf("Case %d: %.10lf
    ",t,dfs(read()));
        }
        return 0;
    }
  • 相关阅读:
    raw_input() 与 input()对比
    你很熟悉CSS,却没掌握这些CSS技巧
    CSS样式设置
    javascript基本语法和变量(转)
    手机/移动前端开发需要注意的20个要点
    移动端”宴席知多少
    git第一次提交代码到远程仓库
    java对过反射调用方法
    站点收集
    别人抢红包,我们研究一下红包算法
  • 原文地址:https://www.cnblogs.com/zcysky/p/6904279.html
Copyright © 2011-2022 走看看