题目链接:Wandering Robots

题解:先讲一下规律,对于每一个格子它可以从多少个地方来有一个值(可以从自己到自己),然后答案就是统计合法格子上的数与所有格子的数的比值

比如说样例的3 0格子上的值就是

3 4 3

4 5 4

3 4 3

答案就是22/33 =2/3;接下来就是如何统计答案了,由于图1e4*1e4的但点只有1e3必须将图离散化得到新图,离散化是要将点相邻的两行也要加进新图,这样省去的点在原图上相邻没有被阻隔的点,然后dfs一次,把可以到达的点标记一边,然后统计答案注意边界。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=3e3+10;
bool vis[N][N],mp[N][N];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int n,k,mm,mn;
int sc[N],sr[N],cn1,cn2;
int x[N],y[N];
int x_hash(int x)
{return lower_bound(sc,sc+mn,x)-sc;
}
int y_hash(int y)
{return lower_bound(sr,sr+mm,y)-sr;
}
void dfs(int x,int y)
{vis[x][y]=1;for(int i=0;i<4;i++){int tx=x+dx[i],ty=y+dy[i];if(tx>=0&&tx<mn&&ty>=0&&ty<mm&&!vis[tx][ty]&&!mp[tx][ty])dfs(tx,ty);}
}
int get(int x,int y)
{if(!vis[x][y])return 0;int cnt=vis[x][y];for(int i=0;i<4;i++){int tx=x+dx[i],ty=y+dy[i];if(tx>=0&&tx<mn&&ty>=0&&ty<mm)cnt+=vis[tx][ty];}return cnt;
}
int main(){int T;scanf("%d",&T);int cas=1;while(T--){cn1=0;cn2=0;//memset(vis,0,sizeof(vis));//memset(mp,0,sizeof(mp));scanf("%d %d",&n,&k);sc[cn1++]=0;sc[cn1++]=n-1;sr[cn2++]=0;sr[cn2++]=n-1;for(int i=0;i<k;i++){scanf("%d %d",&x[i],&y[i]);sc[cn1++]=x[i];if(x[i]-1>=0)sc[cn1++]=x[i]-1;if(x[i]+1<n)sc[cn1++]=x[i]+1;sr[cn2++]=y[i];if(y[i]-1>=0)sr[cn2++]=y[i]-1;if(y[i]+1<n)sr[cn2++]=y[i]+1;}sort(sc,sc+cn1);sort(sr,sr+cn2);mn=unique(sc,sc+cn1)-sc;mm=unique(sr,sr+cn2)-sr;for(int i=0;i<=mn;i++){for(int j=0;j<=mm;j++){vis[i][j]=mp[i][j]=0;}}for(int i=0;i<k;i++){mp[x_hash(x[i])][y_hash(y[i])]=1;}dfs(0,0);int an1=0,an2=0;for(int i=0;i<mn;i++){if(i!=0){an1+=(sc[i-1]+1+sc[i]+1)*(sc[i]-sc[i-1]-1)*5/2;an1-=sc[i]-sc[i-1]-1;}for(int j=0;j<mm;j++){if(sr[j]+sc[i]>=n-1)an1+=get(i,j);if(j<mm-1&&sr[j]+1!=sr[j+1]){int tmp=n-1-sc[i];if(sr[j+1]-1>=tmp){if(sr[j]+1>=tmp){if(sc[i]==0||sc[i]==n-1)an1+=4*(sr[j+1]-sr[j]-1);else an1+=5*(sr[j+1]-sr[j]-1);}else{if(sc[i]==0||sc[i]==n-1)an1+=4*(sr[j+1]-tmp);else an1+=5*(sr[j+1]-tmp);}}}an2+=get(i,j);}}an2+=5*(n*n-mn*mm);an2-=2*(n-mn)+2*(n-mm);int gc=__gcd(an1,an2);an1/=gc;an2/=gc;printf("Case #%d: %d/%d\n",cas++,an1,an2);}return 0;
}

转载于:https://www.cnblogs.com/lhclqslove/p/9736747.html

HDU 6229 Wandering Robots 找规律+离散化相关推荐

  1. HDU 5963 朋友(找规律)

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submiss ...

  2. HDU - 6267 (概论/找规律/递推)

    VJ地址 题目大意: 有n个节点 从0-(n-1),连边的规律为 即i点的父亲只能是比i小的数,而且是随机的,现在随机选择应该一个节点作为根,求这子树的和的期望是多少. 思路:可以知道总共有(n-1) ...

  3. HDU 5914 Triangle 数学找规律

    Triangle 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5914 Description Mr. Frog has n sticks, who ...

  4. HDU ACM 1046 Gridland 找规律

    分析:给出一个矩阵.问最短从一个点经过全部点以此回到起点的长度是多少.绘图非常好理解.先画3*4.3*3.4*4的点阵图案.试着在上面用最短路走一走,能够发现当矩形点阵的长宽都是奇数时,最短路中必然有 ...

  5. hdu 4506(快速幂+找规律)

    小明系列故事--师兄帮帮忙 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Pr ...

  6. 数学--数论--HDU - 6322 打表找规律

    In number theory, Euler's totient function φ(n) counts the positive integers up to a given integer n ...

  7. HDU 5703 Desert 水题 找规律

    HDU 5703 Desert 水题 找规律 已知有n个单位的水,问有几种方式把这些水喝完,每天至少喝1个单位的水,而且每天喝的水的单位为整数.看上去挺复杂要跑循环,但其实上,列举几种情况之后就会发现 ...

  8. hdu 1165 坑爹找规律题

    http://acm.hdu.edu.cn/showproblem.php?pid=1165 不看题解,使劲找规律,应该是可以找到的,就是费时间! Problem Description As is ...

  9. hdu 4279 Number (找规律)

    http://acm.hdu.edu.cn/showproblem.php?pid=4279 题意: 给出a,b两个数,1<=a<=b 如果a,b不互质,且a%b != 0则说明a是b的特 ...

最新文章

  1. 机器指令到汇编再到高级编程语言!
  2. madplay播放器移植
  3. 查linux还是unix,C、C++判断操作系统是Linux、windows还是Unix
  4. ipad连接电脑_这些应用让iPad生产力分分钟UP
  5. C/C++小游戏 ——贪吃蛇
  6. 嵌入式工作笔记0004---常见术语积累--随时更新
  7. 跟ArthurXF学从雅虎抓取股票数据的方法
  8. bzoj 3209: 花神的数论题 喵哈哈村的秘境探险(四)
  9. 计算机图形学实验一直线-DDA算法
  10. 论PRINCE2认证的优势是什么?
  11. 人的肢体语言个人总结
  12. 深信服超融合HCI初级笔试题目(三套)
  13. Linux下Moudle工具的介绍与使用
  14. Redis的集群配置
  15. 【论文笔记】基于分层深度强化学习的移动机器人导航方法
  16. afrog的安装与使用
  17. 2016-6-2-第二个sprint
  18. Code jock的使用--皮肤
  19. 用HTML写的HTML笔记大全✌
  20. 云上安全办公,就用华为云桌面

热门文章

  1. (C#加密)幻术-大踲无形
  2. 惰性求值 php,详细介绍C#函数式编程的示例代码
  3. 能带曲线图绘制python_如何使用python的matplotlib模块画折线图
  4. windows无法配置此无线连接_Kubernetes 1.18功能详解:OIDC发现、Windows节点支持,还有哪些新特性值得期待?...
  5. html控件无法使用的属性值,用 Enabled 和 disabled 属性禁用 HTML 控件后,取值结果...
  6. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...
  7. mongodb在mysql中怎么用,mongoDB数据库基本操作
  8. oracle11g ora00838,管理oracle11g內存設置 解決ora-02097 ora-00838 ora-00845報錯問題
  9. 使用Python,EoN模拟网络中的疾病扩散模型,并结合matplotlib绘图
  10. FT(Fourier Transform)在滤波上的应用