zoukankan      html  css  js  c++  java
  • Uva 11762 Race to 1

    发现列个方程就可以了:

    f(x)=1+ (not_div/tot)*f(x) + (1/tot) ∑f(x/div)
    => (div/tot)*f(x)=1 + (1/tot) ∑f(x/div)
    => f(x)=(tot/div) + (1/div) ∑f(x/div)

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<vector>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #define ll long long
    #define pb push_back
    #define maxn 1000000
    using namespace std;
    vector<int> g[maxn];
    int v[maxn+5],T,n;
    double f[maxn+5];
    bool iscalc[maxn+5];
    
    inline void init(){
    	for(int i=2;i<=maxn;i++) if(!v[i]){
    		g[i].pb(1);
    		for(int u=2,j=i<<1;j<=maxn;j+=i,u++) v[j]=1,g[j].pb(u);
    	}
    		
    	iscalc[1]=1,f[1]=0;
    	
    	for(int i=2;i<=maxn;i++) v[i]=v[i-1]+1-v[i];
    }
    
    inline double dp(int x){
    	if(iscalc[x]) return f[x];
    	iscalc[x]=1,f[x]=v[x];
    	
    	int sz=g[x].size();
    	for(int i=0;i<sz;i++){
    		f[x]+=dp(g[x][i]);
    	}
    	f[x]/=(double)sz;
    	
    	return f[x];
    }
    
    int main(){
    	init();
    	scanf("%d",&T);
    	for(int i=1;i<=T;i++){
    		scanf("%d",&n);
    		printf("Case %d: %.10lf
    ",i,dp(n));
    	}
    	
    	return 0;
    }
    

      

  • 相关阅读:
    字母统计
    特殊乘法
    一年的第几天
    找中位数
    查找学生信息
    Hdu 1009 FatMouse' Trade
    Hdu 1012 u Calculate e
    Hdu 1005 Number Sequence
    Hdu 1008 Elevator
    Hdu 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/JYYHH/p/8444236.html
Copyright © 2011-2022 走看看