题意:一个机器人在正方形迷宫的左上角,迷宫里有些格子有障碍物,每一步机器人会等概率地向能走的格子转移(包含自身)。问你无限长的时间之后,机器人处于矩形对角线的右下方的概率。

无限长时间意味着,起点没有了意义。只需统计右下方每个格子的贡献之和比上所有格子的贡献之和。

假设迷宫不是离散的,而是连续的,那么概率就是右下方的面积比上正方形的总面积。

然而,因为迷宫是离散的,而且有坏点存在,也就意味着会有“边缘效应”存在,边缘处的贡献会降低。假设最开始中间每个格子贡献为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;
}

最新文章

  1. C#与C++之间类型的对应
  2. 配置gitlab gerrit jenkins
  3. jquery mobile 方法收集.
  4. Google Chart API 参考 中文版
  5. 根据div 标签 查看数组@class=modulwrap 下面的/table/tbody/tr/td
  6. 一段简单c程序的汇编语言学习(ubuntu+x86)
  7. apache如何设置缓存
  8. 09-TypeScript中的继承
  9. oracle中求1到100之间的质数和
  10. Spring之IOC(一)
  11. OI暑假集训游记
  12. 微信小程序请求API接口PHPSESSID变化的解决方式
  13. Python开发【字符串格式化篇】
  14. java,优先队列的用法
  15. FTC诉高通垄断案苹果从中受益
  16. MHA-手动Failover流程(传统复制&amp;GTID复制)
  17. 解决UnicodeDecodeError: &#39;ascii&#39; codec can&#39;t decode byte 0xcf in position 7: ordinal not in range(128)
  18. ElementUI select
  19. node升级更新最近稳定版
  20. Android学习笔记_5_文件操作

热门文章

  1. POJ 1050 To the Max (最大子矩阵和)
  2. POJ 3233 Matrix Power Series (矩阵快速幂)
  3. 6.MySQL简介
  4. Anaconda3的安装和汉化
  5. ubuntu14.04安装使用NviDIA显卡驱动
  6. spring集成swagger
  7. 父元素的mousedown事件上父元素的mousedown事件上的offsetX和offsetY错误的offsetX和offsetY错误
  8. laravel5.1--数据库操作
  9. CSRF攻击的应对之道
  10. Linux Shell基础篇——变量