UCF Local Programming Contest 2016 J题(二分+bfs)
题目链接如下:
https://nanti.jisuanke.com/t/43321
思路:
显然我们要采用二分的方法来寻找答案,给定一个高度如果能确定在这个高度时是否可以安全到达终点,那我们就可以很快二分出最大可行的高度。在判断一个高度是否可行时,搜索从起点开始,在限制的高度下所有可以到达的坐标位置,检验是否经过终点即可。
/************************************************
┆ ┏┓ ┏┓ ┆
┆┏┛┻━━━┛┻┓ ┆
┆┃ ┃ ┆
┆┃ ━ ┃ ┆
┆┃ ┳┛ ┗┳ ┃ ┆
┆┃ ┃ ┆
┆┃ ┻ ┃ ┆
┆┗━┓ ┏━┛ ┆
┆ ┃ ┃ ┆
┆ ┃ ┗━━━┓ ┆
┆ ┃ AC代马 ┣┓┆
┆ ┃ ┏┛┆
┆ ┗┓┓┏━┳┓┏┛ ┆
┆ ┃┫┫ ┃┫┫ ┆
┆ ┗┻┛ ┗┻┛ ┆
************************************************ */
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <string>
#include <sstream>
#include <cstdio>
#include <cstring>
#include<cctype>
#include <math.h>
#include <cmath>
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define lb long double
#define LINF 0x3f3f3f3f3f3f3f3f
#define ull unsigned long long
#define random(x) (rand()%x)
#define sgn(x) (fabs(x) < eps ? 0 : ((x) < 0 ? -1 : 1))
#define rep(i, a, b) for(int i=a;i<b;i++)
#define req(j, a, b) for(int j=a;j<b;j++)
#define mem(a, b) memset(a, b, sizeof(a))
#define PI 3.141592653589793
#define K 20 using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
const double eps =1e-;
const double pi = acos(-);
const ll mod = 1e9 + ;
const int hash_mod = ; inline int read()
{
int X=,w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
} inline double dbread()
{
double X=,Y=1.0; int w=; char ch=;
while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
while(isdigit(ch)) X=X*+(ch^),ch=getchar();
ch=getchar();//读入小数点
while(isdigit(ch)) X+=(Y/=)*(ch^),ch=getchar();
return w?-X:X;
} inline void write(int x)
{
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
} ll gcd(ll a,ll b)//辗转相除法(欧几里德算法)求最大公约数
{
return b ? gcd(b,a%b) : a;
}
ll lcm(ll a,ll b)
{
return a*b/gcd(a,b);//最小公倍数
}
ll q_pow(ll base, ll p)
{
ll result = ;
while(p > )
{
if(p&)
{//此处等价于if(power%2==1)
result = result * base % ;
}
p >>= ;//此处等价于power=power/2
base = (base * base) % ;
}
return result;
} const int N = ;
int fri[N]; void init()
{
for(int i = ; i <= N; i++)
fri[i] = i;
}
int find(int a) //查找根节点
{
int tem1 = a,tem2;
while(a != fri[a])
a = fri[a];
while(tem1 != a)
{
tem2 = fri[tem1];
fri[tem1] = a;
tem1 = tem2;
}
return a;
}
void Union(int a,int b)
{
int fri_a = find(a);
int fri_b = find(b);
if(fri_a != fri_b)
{
fri[fri_a] = fri_b;
}
return ;
} int eval(char c)
{
if(c==' ')
return ;
if(c=='\'')
return ;
return c - 'A' + ;
} double pointSegDist(double cx, double cy, double px1, double py1, double px2, double py2)
{
cx -= px1;
px2 -= px1;
cy -= py1;
py2 -= py1; double len = sqrt(px2*px2 + py2*py2);
double ux = px2 / (len * 1.0);
double uy = py2/ (len * 1.0);
uy = -uy;
double nx = cx * ux - cy * uy;
double ny = cx * uy + cy * ux; if(nx>= && nx <= len)
return abs(ny); if(nx > len)
nx -= len;
return sqrt(nx*nx + ny*ny);
} bool f(ll n)
{
for(ll i=;i<=n;i++)
{
if(n % (i * i) == )
return false;
}
return true;
} bool judgeStr(string s)
{
int len = s.size();
int i,j;
for(i=,j=len-;i<=len/;i++,j--)
{
if(s[i]!=s[j])
return ;
}
return ;
} ll f(ll n, ll d)
{
ll ans = ;
while(n > && n % d == )
{
n /= d;
ans++;
}
return ans;
} ll power(ll a, ll b)
{
long long ans = ;
for (int i=;i<b;i++)
ans *= a;
return ans;
} const int maxnn = 1e5+; int dx[]={, , -, }; int dy[]={, , , -}; int vis[][]; int w[][]; int r, c; int bfs(int h)
{
mem(vis, );
vis[][] = ;
queue<int> q;
//x,y,dis
q.push();
q.push();
q.push();
while(q.size() > )
{
int x = q.front();
q.pop();
int y = q.front();
q.pop();
int dis = q.front();
q.pop();
if(w[x][y] - dis >= h)
{
if(x == r- && y == c-)
{
return true;
}
for(int i=;i<;i++)
{
int a = x + dx[i];
int b = y + dy[i];
if(a >= && a < r && b >= && b < c && !vis[a][b])
{
vis[a][b] = ;
q.push(a);
q.push(b);
q.push(dis+);
}
}
}
}
return false;
} int main()
{
int t;
cin >> t;
while(t--)
{
cin >> r >> c;
for(int i=;i<r;i++)
{
for(int j=;j<c;j++)
{
cin >> w[i][j];
}
}
int left = ;
int right = INF;
while(left < right)
{
int mid = (left + right + ) / ;
if(bfs(mid))
{
left = mid;
} else
{
right = mid - ;
}
}
if(left > )
cout << left << endl;
else
cout << "impossible" << endl;
}
return ;
}
UCF Local Programming Contest 2016 J题(二分+bfs)的更多相关文章
- 2020.3.28-ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016
A.Majestic 10 签到题. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- 03.28,周六,12:00-17:00,ICPC训练联盟周赛,选用试题:UCF Local Programming Contest 2016正式赛。
A. Majestic 10 题意:三个数均大于10则输出"triple-double",如果两个数大于10则输出"double-double",如果一个大于1 ...
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) J
链接:http://codeforces.com/gym/101116 题意:给出n个点,要求一个矩形框将(n/2)+1个点框住,要面积最小 解法:先根据x轴选出i->j之间的点,中间的点(包括 ...
- 04.06 UCF Local Programming Contest 2017
A.Electric Bill 题意:简单计算题,超过1000部分额外算 1 #include<stdio.h> 2 int main(){ 3 int money1,money2; 4 ...
- 03.21 ICPC训练联盟周赛:UCF Local Programming Contest 2018正式赛
B Breaking Branches 题意:两个人比赛折枝,谁剩下最后1,无法折出整数即为输 思路:树枝长n,若是奇数,则Bob胜出,若是偶数,则Alice胜出,且需要输出1: 1 #include ...
- (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题)
layout: post title: (寒假开黑gym)2018 ACM-ICPC, Syrian Collegiate Programming Contest(爽题) author: " ...
- The 15th UESTC Programming Contest Preliminary J - Jermutat1on cdoj1567
地址:http://acm.uestc.edu.cn/#/problem/show/1567 题目: Jermutat1on Time Limit: 3000/1000MS (Java/Others) ...
- Gym 100952F&&2015 HIAST Collegiate Programming Contest F. Contestants Ranking【BFS+STL乱搞(map+vector)+优先队列】
F. Contestants Ranking time limit per test:1 second memory limit per test:24 megabytes input:standar ...
- 2016-2017 CT S03E05: Codeforces Trainings Season 3 Episode 5 (2016 Stanford Local Programming Contest, Extended) E
链接:http://codeforces.com/gym/101116 学弟写的,以后再补 #include <iostream> #include <algorithm> # ...
随机推荐
- Proto3:Techniques
本文描述处理Protocol Buffer常用到的一些设计模式.你也可以给Protocol Buffers discussion group发送设计或使用问题. 流式多条消息 如果你想将多个消息写入到 ...
- wxpython(2)--按钮,位图按钮,滑动块,微调控制器
本文介绍按钮,位图按钮,滑动块,微调控制器**.. 按钮 基本按钮 创建一个按钮,绑定点击事件,点击后修改Label 123456789101112131415161718 import wx cla ...
- 全栈新视觉——前后端分离
1234 前端工程化从单纯的 HTML/CSS/JavaScript,到 gulp/webpack 以及 node.js.可能还需要其他的插件 sass.less.vue.react.angular. ...
- oracle中group by 和order by同时存在时
关键点:order by 的栏位必须在group by 中有:例如:select name from TABLE group by name ,id order by id asc
- 记录R的一些黑魔法
通路富集结果可视化 12345678 pathway<-read.table("PTC+_transcript_pep_supp_KEGG.txt",header=T,sep ...
- 关于RN的热更新
写点关于RN的热更新和RN版本升级后的强制更新.以及优化白屏问题 在APPDelegate中加载RN,一般的加载方式是:RCTRootView *rootView= [[RCTRootView all ...
- 【WPF学习】第五十六章 基于帧的动画
除基于属性的动画系统外,WPF提供了一种创建基于帧的动画的方法,这种方法只使用代码.需要做的全部工作是响应静态的CompositionTarge.Rendering事件,触发该事件是为了给每帧获取内容 ...
- 原生js实现在表格用鼠标框选并有反选功能
今天应同学要求,需要写一个像Excel那样框选高亮,并且实现框选区域实现反选功能.要我用原生js写,由于没什么经验翻阅了很多资料,第一次写文章希望各位指出不足!! 上来先建表 <div clas ...
- 内网渗透之权限维持 - MSF
年初九 天公生 0x034 MSF(美少妇) 启动msf msfconsole 先启动msf依赖的postgresql数据库 初始化数据库 msfdb init (要用普通用户) msf路径 /usr ...
- aosp Pixel 修改 SIM 卡支持及解决网络带x问题
去除网络X的方法 adb shell settings put global captive_portal_https_url http://g.cn/generate_204 自己用 php 做一个 ...