BestCoder Round #7-A,B,C

來源:互聯網
上載者:User

標籤:style   http   color   os   io   ar   for   art   sp   

A:Little Pony and Permutation

直接暴力搜尋,複雜度O(n)

#include<stdio.h>#include<iostream>#include<stdlib.h>#include<string.h>#include<algorithm>#include<vector>#include<math.h>#include<queue>#include<stack>#include<map>#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define maxn 110000int a[maxn];int vis[maxn];int main(){    int n;    while(~scanf("%d",&n))    {        for(int i=1;i<=n;i++)scanf("%d",&a[i]);        memset(vis,0,sizeof(vis));        for(int i=1;i<=n;i++)        {            if(vis[i])continue;            int x=i;            cout<<"("<<x;            vis[x]=1;            x=a[x];            while(!vis[x])            {                vis[x]=1;                cout<<" "<<x;                x=a[x];            }            cout<<")";        }        cout<<endl;    }    return 0;}

B:Little Pony and Alohomora Part I

我們可以發現,這是一個調和序列。

然後。。。就很那個啥了。。、

#include<stdio.h>#include<iostream>#include<stdlib.h>#include<string.h>#include<algorithm>#include<vector>#include<math.h>#include<queue>#include<stack>#include<map>#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;#define maxn 1100000double f[maxn];int main(){    int n;    f[1]=1.0;    for(int i=2;i<maxn;i++)f[i]=f[i-1]+1.0/i;    while(~scanf("%d",&n))    {        if(n<maxn)printf("%.4lf\n",f[n]);        else printf("%.4lf\n",log(n)+0.5772156649);    }    return 0;}

C:Little Pony and Dice

dp[i]: 恰好走到i點的機率

dp[i]=dp[i-1]*(1/m)+(dp[i-1]-dp[i-m-1]*(1.0/m))

dp[i-1]*(1/m)代表從i-1這個點走到i點的機率。

(dp[i-1]-dp[i-m-1]*(1.0/m))所有走到i-1的點除了i-m-1點外,其他的點都能走到i,並且走到i-1和走到i的機率相同

如果相鄰的兩個i之間的dp[i]相差很小,那說明下一個dp[i]的變化也會很小。以後就都是這個定值了。所以直接輸出就好。

<pre name="code" class="cpp">#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<vector>#include<set>#include<string>#include<math.h>using namespace std;#define LL __int64#define maxn 703000#define eps 1e-13#define zero(x) (fabs(x)<eps?0:x)double dp[maxn];int main(){    int n,m;    while(~scanf("%d%d",&m,&n))    {        dp[0]=1.0;        dp[1]=1.0/m;        int i;        for(i=2;i<=n;i++)        {            dp[i]=dp[i-1]+dp[i-1]*1.0/m;            if(i>m)dp[i]=dp[i]-dp[i-m-1]*1.0/m;            if((zero(dp[i]-dp[i-1])==0))            {                printf("%.5lf\n",dp[i]);                break;            }        }        if(i>n)printf("%.5lf\n",dp[n]);    }    return 0;}














BestCoder Round #7-A,B,C

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.