洛谷2658 汽车拉力比赛 二分
题目链接:
https://www.luogu.org/problem/show?pid=2658
题意:
题解:
二分D,BFS判断是否可以到达全部路标。
很有道理啊,为什么T啊!
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 #define MS(a) memset(a,0,sizeof(a)) 5 #define MP make_pair 6 #define PB push_back 7 const int INF = 0x3f3f3f3f; 8 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL; 9 inline ll read(){ 10 ll x=0,f=1;char ch=getchar(); 11 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} 12 while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} 13 return x*f; 14 } 15 // 16 const int maxn = 500+10; 17 18 int n,m,sx,sy,sum; 19 int G[maxn][maxn],is_p[maxn][maxn],vis[maxn][maxn]; 20 int dx[4] = {0,0,1,-1}; 21 int dy[4] = {1,-1,0,0}; 22 23 struct node{ 24 int x,y; 25 }; 26 27 bool ok(int x,int y){ 28 return x>=1 && x<=n && y>=1 && y<=m && !vis[x][y]; 29 } 30 31 bool check(int x){ 32 MS(vis); 33 queue<node> q; 34 q.push(node{sx,sy}); vis[sx][sy] = 1; 35 int cnt = 1; 36 while(!q.empty()){ 37 node now = q.front(); q.pop(); 38 for(int i=0; i<4; i++){ 39 int tx=now.x+dx[i]; 40 int ty=now.y+dy[i]; 41 if(ok(tx,ty) && abs(G[tx][ty]-G[now.x][now.y]) <= x){ 42 vis[tx][ty] = 1; 43 q.push(node{tx,ty}); 44 cnt += is_p[tx][ty]; 45 if(cnt == sum) return true; 46 } 47 } 48 } 49 // return cnt == sum; 50 return false; 51 } 52 53 int main(){ 54 n=read(),m=read(); 55 int mi=INF,mx=-1; 56 for(int i=1; i<=n; i++) 57 for(int j=1; j<=m; j++){ 58 G[i][j]=read(); 59 mi=min(mi,G[i][j]); 60 mx=max(mx,G[i][j]); 61 } 62 for(int i=1; i<=n; i++) 63 for(int j=1; j<=m; j++){ 64 is_p[i][j]=read(); 65 sum += is_p[i][j]; 66 if(is_p[i][j]) sx=i,sy=j; 67 } 68 69 int L=0,R=mx-mi,ans=0; 70 while(L<=R){ 71 int mid = (L+R)/2; 72 if(check(mid)) ans=mid,R=mid-1; 73 else L=mid+1; 74 } 75 76 cout << ans << endl; 77 78 return 0; 79 }
转载于:https://www.cnblogs.com/yxg123123/p/6827627.html
洛谷2658 汽车拉力比赛 二分相关推荐
- 洛谷2658 汽车拉力比赛
洛谷2658 汽车拉力比赛 本题地址: http://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M* ...
- 洛谷—— P2658 汽车拉力比赛
https://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ...
- 洛谷P2658 汽车拉力比赛
题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N≤500),每个单元格的海拔范围在0到10^9之间. 其中一些单元格被定义为路标.组织者希 ...
- 洛谷——P2658 汽车拉力比赛
P2658 汽车拉力比赛 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ≤500),每个单元格的海拔范围在0到10^9之间. 其中一些 ...
- 洛谷月赛:最后的狂欢 汽车拉力比赛
本题地址: http://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ ...
- P2658 汽车拉力比赛 - 普及+/提高-二分+搜索
P2658 汽车拉力比赛 思路:刚开始我就写了一个把路标的四个方向最小的值 的 最大值输出来,答案就能得到90分哈哈哈,但这是不正确的做法 还是AC不了! 自己也是没做出来 . 这个题用到了搜索+二分 ...
- P2658 汽车拉力比赛
题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ≤500),每个单元格的海拔范围在0到10^9之间. 其中一些单元格被定义为路标.组织者 ...
- 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...
- scau 8616 汽车拉力比赛
上次我们过了二分图的最佳匹配,现在我们看一道题目,经典的二分图的最佳匹配题目 8616 汽车拉力比赛 时间限制:500MS 内存限制:1000K 提交次数:71 通过次数:24 题型: ...
最新文章
- STC自动高速下载线
- 千锋教育python全集_千锋python+人工智能最新视频教程(大全集)
- java怎么看提示错误,Mabatis错误提示Parameter index out of range的处理方法
- JavaScript 框架这一年:React、Angular 们正在互相渗透
- Framework4.0 IIS7下urlrewriter设置问题
- 大热的麦克风阵列语音识别系统的设计和轻松实现,提供软硬件解决方案
- windows之2012缺少api-ms-win-crt**.dll
- c语言枚举法在单片机的应用领域,当前单片机主要应用在哪些领域?
- Oracle创建函数
- matlab半波整流怎么做,基于Matlab的单相半波可控整流电路的设计与仿真.doc
- 宝塔linux怎么运行war,宝塔Linux面板在线解压WAR压缩文件
- 华为access、trunk、hybird接口从tag和untag进行了解。
- dlib实现人脸对齐方法
- 程序员离职原因的最佳回答_转行面试,高情商回答“你为什么要离职?”(建议收藏)...
- 数组的扁平化方法总结
- stratum协议原理
- 如何修清净心?(净空老法师法语)
- html和css怎么学好,如何学好css?
- 力扣第314周赛第三题
- [论文分享] Function Representations for Binary Similarity