题目链接  HDU 6229

题意 在一个$N * N$的格子矩阵里,有一个机器人。

  格子按照行和列标号,左上角的坐标为$(0, 0)$,右下角的坐标为$(N - 1, N - 1)$

  有一个机器人,初始位置为$(0, 0)$。

  现在这个矩阵里面,有一些障碍物,也就是说机器人不能通过这些障碍物。

  若机器人当前位置为$(x, y)$,那么他下一个位置有可能为与当前格子曼哈顿距离为$1$的所有格子的任意1个。

  也有可能停留在原来的位置$(x, y)$

  求经过无限长的时间之后,这个机器人的位置在给定区域的概率。

  结果用分数表示。

  给定区域为$(x, y)$,满足 $x + y ≥ N - 1$

  题目满足无障碍区域是连通的

当时在现场,和Au的差距就是罚时和这道题。

结论其实很简单,但是赛场上因为思维僵化就是想不出来。

首先对于每个点,初始都有一个权值。

角落的权值为$3$,边上但不是角落的权值为$4$,其他点权值为$5$。

我们对每个障碍点进行处理。障碍点的权值直接赋值为$0$,障碍周围的点权值减$1$

由于开不下那么大的二维数组,所以对那些被操作过的点,我们用map记录。

最后把区域内的权值累加,除以整个矩形的权值和即为答案。

#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b)	for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i)
#define MP make_pair
#define fi first
#define se second typedef long long LL;
typedef pair <int, int> PII; const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1}; int T;
int n, m; map < pair <int, int> , LL > mp;
int ca = 0; inline LL judge(int x, int y){
if ((x == 0 && y == 0) || (x == 0 && y == n - 1) || (x == n - 1 && y == 0) || (x == n - 1 && y == n - 1)) return 3;
if (x == 0 || x == n - 1 || y == 0 || y == n - 1) return 4;
return 5;
} inline bool check(int x, int y){
return (x + y) >= (n - 1);
} inline bool ok(int x, int y){
return x >= 0 && y >= 0 && x <= n - 1 && y <= n - 1;
} LL gcd(LL a, LL b){
return b == 0 ? a : gcd(b, a % b);
} int main(){ scanf("%d", &T);
while (T--){
scanf("%d%d", &n, &m);
LL all = 4 * 3 + (n - 2) * 4 * 4 + 5 * (n - 2) * (n - 2);
LL xx1 = 3, xx2 = 2 * (n - 2);
LL xx3 = n * (n + 1) / 2 - xx1 - xx2;
LL sum = xx1 * 3 + xx2 * 4 + xx3 * 5; mp.clear();
while (m--){
int x, y;
scanf("%d%d", &x, &y);
mp[MP(x, y)] = judge(x, y);
rep(i, 0, 3){
int nx = x + dx[i], ny = y + dy[i];
if (ok(nx, ny)){
++mp[MP(nx, ny)];
mp[MP(nx, ny)] = min(mp[MP(nx, ny)], judge(nx, ny));
}
} } for (auto cnt : mp){
int x = cnt.fi.fi, y = cnt.fi.se;
LL z = cnt.se;
if (check(x, y)) sum -= z;
all -= z;
} LL a1 = sum, a2 = all;
LL g = gcd(a1, a2);
a1 /= g, a2 /= g;
printf("Case #%d: %lld/%lld\n", ++ca, a1, a2);
} return 0;
}

  

HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)的更多相关文章

  1. hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map

    题目传送门 题目大意: 给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物).题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无 ...

  2. Infinite Fraction Path HDU 6223 2017沈阳区域赛G题题解

    题意:给你一个字符串s,找到满足条件(s[i]的下一个字符是s[(i*i+1)%n])的最大字典序的长度为n的串. 思路:类似后缀数组,每次倍增来对以i开头的字符串排序,复杂度O(nlogn).代码很 ...

  3. hdu6223 Infinite Fraction Path 2017沈阳区域赛G题 bfs加剪枝(好题)

    题目传送门 题目大意:给出n座城市,每个城市都有一个0到9的val,城市的编号是从0到n-1,从i位置出发,只能走到(i*i+1)%n这个位置,从任意起点开始,每走一步都会得到一个数字,走n-1步,会 ...

  4. HDU 6229 - Wandering Robots - [概率题]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6229 转载: https://blog.csdn.net/Anna__1997/article/det ...

  5. 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)

    Infinite Fraction Path Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java ...

  6. HDU 6205 2017沈阳网络赛 思维题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6205 题意:给你n堆牌,原本每一堆的所有牌(a[i]张)默认向下,每次从第一堆开始,将固定个数的牌(b ...

  7. Heron and His Triangle 2017 沈阳区域赛

    A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...

  8. 2017乌鲁木齐区域赛D题Fence Building-平面图的欧拉公式

    这个题B站上面有这题很完整的分析和证明,你实在不懂,可以看看这个视频  https://www.bilibili.com/video/av19849697?share_medium=android&a ...

  9. 2017西安区域赛A / UVALive - 8512 线段树维护线性基合并

    题意:给定\(a[1...n]\),\(Q\)次询问求\(A[L...R]\)的异或组合再或上\(K\)的最大值 本题是2017的西安区域赛A题,了解线性基之后你会发现这根本就是套路题.. 只要用线段 ...

随机推荐

  1. 51NOD 1292 1277(KMP算法,字符串中的有限状态自动机)

    在前两天的CCPC网络赛中...被一发KMP题卡了住了...遂决定,哪里跌倒就在哪里爬起来...把个KMP恶补一发,连带着把AC自动机什么的也整上. 首先,介绍设定:KMP算法计划解决的基本问题是,两 ...

  2. SJTU 1077 加分二叉树

    http://acm.sjtu.edu.cn/OnlineJudge/problem/1077 题意: 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3…,n为节点 ...

  3. TCP/IP网络编程之网络编程和套接字

    网络编程和套接字 网络编程又称为套接字编程,就是编写一段程序,使得两台连网的计算机彼此之间可以交换数据.那么,这两台计算机用什么传输数据呢?首先,需要物理连接,将一台台独立的计算机通过物理线路连接在一 ...

  4. mongoTemplate学习笔记

    mongoTemplate的andExpression表达式 Aggregation<Post> agg = Aggregation.newAggregation( Record.clas ...

  5. ffmpeg转换参数和对几种视频格式的转换分析

    我们在将多种格式的视频转换成flv格式的时候,我们关注的就是转换后的flv视频的品质和大小.下面就自己的实践所得来和大家分享一下,主要针对avi.3gp.mp4和wmv四种格式来进行分析.通常在使用f ...

  6. Python框架之Django学习笔记(一)

    Django历史: Django 是从真实世界的应用中成长起来的,它是由 堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组编写的. 它诞生于 2003 年秋天,那时 Lawrenc ...

  7. 编写高性能React组件-传值篇

    很多人在写React组件的时候没有太在意React组件的性能,使得React做了很多不必要的render,现在我就说说该怎么来编写搞性能的React组件. 首先我们来看一下下面两个组件 import ...

  8. leetcode NO.349 两个数组的交集 (python实现)

    来源 https://leetcode-cn.com/problems/intersection-of-two-arrays/ 题目描述 给定两个数组,写一个函数来计算它们的交集. 例子: 给定 nu ...

  9. [HAOI2011][bzoj2301] Problem b [莫比乌斯反演+容斥原理+分块前缀和优化]

    题面: 传送门 有洛谷就尽量放洛谷链接呗,界面友好一点 思路: 和HDU1695比较像,但是这一回有50000组数据,直接莫比乌斯反演慢慢加的话会T 先解决一个前置问题:怎么处理a,c不是1的情况? ...

  10. BZOJ3561 DZY Loves Math VI 【莫比乌斯反演】

    题目 给定正整数n,m.求 输入格式 一行两个整数n,m. 输出格式 一个整数,为答案模1000000007后的值. 输入样例 5 4 输出样例 424 提示 数据规模: 1<=n,m<= ...