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> # ...
随机推荐
- javaScript系列 [28]
本文介绍JavaScript事件相关的知识点,主要包括事件流.事件处理程序.事件对象(event)以及常见事件类型和事件委托等相关内容. 在网页开发涉及的三种基础技术(HTML CSS JavaScr ...
- 【转载】Java DecimalFormat 用法
转载只供个人学习参考,以下查看请前往原出处:http://blog.csdn.net/wangchangshuai0010/article/details/8577982 我们经常要将数字进行格式化, ...
- 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API
https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...
- 告别ThinkPHP6的异常页面, 让我们来拥抱whoops吧
春节期间熟悉了TP6, 也写了一个TP6的博客程序,但系统的异常页面实在另外头疼,很多时候无法查看到是哪行代码出的问题. 所以就特别的想把whoops引进来,经过一系列的研究,终于找到了解决的办法: ...
- web资源预加载-生产环境实践
此文记录资源预加载在我们项目的实践,技术难度不算高,重在介绍一套技术方案的诞生与实施,其中都进行了哪些思考,依据什么来做决策,如何进行效果评估,等等.为读者在制定技术方案时提供一定启示. 背景 资源预 ...
- date成字符串
//获取当前时间 Date date=new Date(); System.out.println("当前date: "+date); //将时间转化成yyyy-MM-dd格式的字 ...
- Mysql或者SQL Server数据库的运行机制和体系架构
一.MySQL主要分为以下几个组件: 连接池组件 管理服务和工具组件 SQL接口组件 分析器组件 优化器组件 缓冲组件 插件式存储引擎 物理文件 二.MySql的组成:Mysql是由SQL接口,解析器 ...
- 菜鸟系列 Golang 实战 Leetcode —— 面试题24. 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3- ...
- 修改gridfilters.js源码,往后台多传递一个参数,并设置NumericFilter、StringFilter默认提示信息
创作不易,转载请注明出处!!! 效果 修改:ext-extend.js源码 在最后面添加3行,重写方法 代码拷贝区 Ext.override(Ext.ux.grid.GridFilters, { me ...
- docker安装与环境部署
使用docker搭建环境 摘要 install docker start docker install docker-compose 部署upload-labs/sqli-labs 部署dvwa 部署 ...