【概率】【找規律】hdu6229 Wandering Robots
阿新 • • 發佈:2017-11-16
scan 矩形 對角線 -a cst 效應 邊緣 rdquo ots
題意:一個機器人在正方形迷宮的左上角,迷宮裏有些格子有障礙物,每一步機器人會等概率地向能走的格子轉移(包含自身)。問你無限長的時間之後,機器人處於矩形對角線的右下方的概率。
無限長時間意味著,起點沒有了意義。只需統計右下方每個格子的貢獻之和比上所有格子的貢獻之和。
假設迷宮不是離散的,而是連續的,那麽概率就是右下方的面積比上正方形的總面積。
然而,因為迷宮是離散的,而且有壞點存在,也就意味著會有“邊緣效應”存在,邊緣處的貢獻會降低。假設最開始中間每個格子貢獻為5(有五個格子可以轉移到它),邊緣為4,角落為3。再扣去壞點的損失,直接用右下方之和比上所有之和就是答案了。
#include<cstdio> #include<algorithm> using namespace std; int T,n,K; int x[1005],y[1005]; typedef long long ll; const int dx[]={0,1,0,-1},dy[]={1,0,-1,0}; bool a[10005][10005]; int main(){ scanf("%d",&T); for(int zu=1;zu<=T;++zu){ scanf("%d%d",&n,&K); ll ans=(ll)(n-2)*(ll)(5*n+6)+12ll; ll ans2=(ans-5ll*(ll)n+4ll)/2ll+5ll*(ll)n-4ll; for(int i=1;i<=K;++i){ scanf("%d%d",&x[i],&y[i]); a[x[i]][y[i]]=1; } for(int i=1;i<=K;++i){ int cnt=0; for(int j=0;j<4;++j){ int tx=x[i]+dx[j],ty=y[i]+dy[j]; if(tx>=0 && tx<n && ty>=0 && ty<n){ ++cnt; if(!a[tx][ty]){ --ans; if(tx+ty>=n-1){ --ans2; } } } } ans-=(ll)(cnt+1); if(x[i]+y[i]>=n-1){ ans2-=(ll)(cnt+1); } } printf("Case #%d: %lld/%lld\n",zu,ans2/__gcd(ans2,ans),ans/__gcd(ans2,ans)); for(int i=1;i<=K;++i){ a[x[i]][y[i]]=0; } } return 0; }
【概率】【找規律】hdu6229 Wandering Robots