题目传送门

题目大意:

给出一张n*n的图,机器人在一秒钟内任一格子上都可以有五种操作,上下左右或者停顿,(不能出边界,不能碰到障碍物)。题目给出k个障碍物,但保证没有障碍物的地方是强联通的,问经过无限长的时间后,停留在所有(x,y)(x+y>=n-1)的概率有多大。

思路:

概论题看上去很恐怖,但其实想到了就很简单。

先考虑没有障碍物的情况,由于是无限长的时间,那么最开始的时间机器人的走法是不会影响最终答案的,所以经过比较短的时间后,机器人可以出现在图上的任意地方,在这个时候到下一秒,机器人在不同格子能操作的数量是一个类似下面这个矩阵,而对于一个格子,能到这个格子的情况也是下面这个矩阵。

34443

45554

45554

45554

34443

也就是说,到下一秒的总情况数量就是上面这个矩阵的sum,合法的区域就是右下角这块的sum,在没有障碍物的情况下,概率就是这样了。

现在考虑上障碍物,一个格子放上障碍物,如果他旁边的格子没有障碍物,那么总情况就减少从其他格子到这个格子的情况,和从这个格子到其他格子的情况,如果旁边有障碍物,则不会有从其他格子到这个格子的情况,所以只要减去本身就可以了(事实上,没有减去这个1是因为在计算旁边的障碍物时已经减去了)。也就是分母减去(self+tot),tot为旁边的障碍数。

最后算一下gcd就可以了。

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<string.h>
#include<sstream>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<bitset>
#define CLR(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
inline int rd() {
int f = ;
int x = ;
char s = getchar();
while (s<'' || s>'') {
if (s == '-')f = -;
s = getchar();
}
while (s >= ''&&s <= '') {
x = x * + s - '';
s = getchar();
}
x *= f;
return x;
}
ll n,p,q;
inline ll gcd(ll a,ll b) {
if(b==)return a;
return gcd(b,a%b);
}
int k;
map<pair<int ,int >,int >mp;
int fx[][]= {{,},{,-},{,},{-,}};
int check(int x,int y) {
if((x==||x==n-)&&(y==||y==n-)) return ;
if((x==||x==n-)&&(y!=&&y!=n-)) return ;
if((y==||y==n-)&&(x!=&&x!=n-)) return ;
return ;
}
int main() {
int x,y;
int T,cas=;
cin>>T;
while(T--) {
scanf("%lld%d",&n,&k);
mp.clear();
p=((*)+((n-)**)+(n-)*(n-)*); //分母
q=((*)+((n-)**)+((n-)*(n-)/*)); //分子
while(k--) {
scanf("%d%d",&x,&y);
mp[make_pair(x,y)]=;
}
for(auto it:mp) {
x=it.first.first;
y=it.first.second;
p-=check(x,y);
if( x + y >= n - )q -= check(x,y);
for(int i=; i<; i++) {
int xx = x + fx[i][],yy = y+fx[i][];
if(xx<||yy<||xx>=n||yy>=n)continue;
if(!mp.count(make_pair(xx,yy))) {
p -= ;
if(xx + yy >= n-) {
q -= ;
}
}
}
}
ll g=gcd(p,q);
printf("Case #%d: %lld/%lld\n",cas++,q/g,p/g);
}
}

Wandering Robots

Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 466    Accepted Submission(s): 239

Problem Description
In an attempt to colonize Mars, some scientists were tasked with cleaning the planet. A cleaning robot, Marsba,was build with a huge restricted area in the Mars as a massive N × N square grid with K (K ≤ 1000) impassable barriers. This area are numbered from (0, 0) to (N - 1, N - 1) sequentially from left to right, row by row, where N ≤ 10000. The starting point of Marsba is situated on the top left corner lattice (0, 0). Marsba had instructions to program him with equal probability of remaining in the same lattice or travelling to an adjacent one. (Two lattices are said to be adjacent if they share a common edge.) This meant an equal probability being split equally between remaining in the lattice and the number of available routes. Specifically, for the lattice Marsba located in which has d adjacent lattices without impassable barriers, the probability for Marsba of remaining in the lattice or travelling to any adjacent lattice is \frac{1}{d+1} .
Then, those scientists completely forgot about it.
Many millennia ago, a young man realizes the importance of the cleaning robot, Marsba, at the end of the forgotten.
For further research, he asks you to calculate the probability of Marsba’s location (x, y) satisfying x + y ≥ N - 1.
Let the probability be an irreducible fraction of the form p/q, you should output p and q respectively, with a fraction slash as the separator.
 
Input
The first line of the input contains an integer t (t ≤ 1000) specifying the number of test cases.
For each case, the first line contains two positive integers N and K. Each of the next K lines contains the coordinate of a barrier.
Note that the starting point (0, 0) has no barrier and all test cases guarantee the connectivity of all lattices free of barriers.
 
Output
For each case output its label first, then output the probability as an irreducible fraction.
 
Sample Input
5
3 0
3 1
1 1
3 2
1 1
2 2
3 3
1 1
1 2
2 2
5 4
1 1
1 2
2 3
3 2
 
Sample Output
Case #1: 2/3
Case #2: 5/8
Case #3: 10/19
Case #4: 7/16
Case #5: 43/71

hdu6229 Wandering Robots 2017沈阳区域赛M题 思维加map的更多相关文章

  1. HDU 6229 Wandering Robots(2017 沈阳区域赛 M题,结论)

    题目链接  HDU 6229 题意 在一个$N * N$的格子矩阵里,有一个机器人. 格子按照行和列标号,左上角的坐标为$(0, 0)$,右下角的坐标为$(N - 1, N - 1)$ 有一个机器人, ...

  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. 2017沈阳区域赛Infinite Fraction Path(BFS + 剪枝)

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

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

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

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

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

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

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

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

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

  9. HDU-5532//2015ACM/ICPC亚洲区长春站-重现赛-F - Almost Sorted Array/,哈哈,水一把区域赛的题~~

    F - Almost Sorted Array Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & ...

随机推荐

  1. 配置镜像yum源--解决RHN not available的问题

    由于RHN服务是收费的,在安装redhat系统时,自带的yum可能不能使用.中国有很多好用的镜像源,我们可以把yum源更改到国内镜像源上,步骤如下: 一.卸载本地yum #rpm –qa|grep y ...

  2. android键盘的Done按钮

    在EditText中,可以使用setImeOptions()方法来来开启软键盘的"Done"按钮. 示例代码如下:editText.setImeOptions(EditorInfo ...

  3. HDOJ 1023 Train Problem II 卡特兰数

    火车进站出站的问题满足卡特兰数...卡特兰数的相关知识如下: 卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. ...

  4. ARC102D All Your Paths are Different Lengths

    传送门 题目大意 让你构造一个有向图,使得从1到n有L条不同路径且长度分别是0~L-1. 分析 我们不难想到每一对相邻点之间连一条权值为0的边,之后二进制分解,将每一对点之间连一个权值为2^i的边,但 ...

  5. 初识 Redis

    浏览目录 什么是redis redis的特点 redis的安装和基本使用 操作模式 连接池 操作 string操作 hash操作 list操作 什么是Redis? redis是一个key-value存 ...

  6. 24.Windows任意文件读取漏洞

    漏洞概述: 近日,国外安全研究员SandboxEscaper又一次在推特上公布了新的Windows 0 day漏洞细节及PoC.这是2018年8月开始该研究员公布的第三个windows 0 day漏洞 ...

  7. 探讨js闭包

    背景:爱就要大胆说出来,对于编程我只想说,喜欢就大胆写出来.喜欢却不行动那就意味着失败.所以,对于在研究编程的猿们,我对同伴们说,大胆的学,大胆的写.呵呵,说这些其实无非是给我自己点动力,写下去的勇气 ...

  8. 在Repeater控件的OnItemDataBound获取数据源记录总数

    Insus.NEt曾经有写过一篇<Repeater控件最后一笔记录高亮显示> ,它的实现是先宣告一个页面级的变量,然后在Data_Binding()方法内获取数据源的记录总数. 本篇是的重 ...

  9. javascript 取掉空格自定义函数

    js  取掉空格自定义函数 //取掉左右空格: function trim(str){ return str.replace(/(^\s*)|(\s*$)/g, ""); } // ...

  10. Alyona and towers CodeForces - 739C (线段树)

    大意: 给定序列, 要求实现区间加, 询问整个序列最长的先增后减的区间. 线段树维护左右两端递增,递减,先增后减的长度即可, 要注意严格递增, 合并时要注意相等的情况, 要注意相加会爆int. #in ...