[Usaco2006 Open]The Climbing Wall 攀岩
来源:互联网 发布:知天下资源吗邀请码 编辑:程序博客网 时间:2024/04/27 17:43
Description
One of the most popular attractions at the county fair is the climbing wall. Bessie wants to plan her trip up the wall in advance and needs your help. The wall is 30,000 millimeters wide and H (1001 <= H <= 30,000) millimeters high and has F (1 <= F <= 10,000) hoof-holds at unique X,Y coordinates expressed in millimeters. 0,0 is at the ground level on the left side of the wall. Hoof-holds are separated by at least 300 millimeters since no cow can maneuver them if they are spaced too close! Bessie knows there is at least one way up. Bessie, through techniques only she knows, uses successive single hoof-holds to climb the wall. She can only move from one hoof-hold to another if they are no more than one meter apart. She can, of course, move up, down, right, left or some combination of these in each move. Similarly, once she gets to a hoof-hold that is at least H-1000 millimeters above the ground, she can nimbly climb from there onto the platform atop the wall. Bessie can start at any X location that has a Y location <= 1000 millimeters. Given the height of the wall and the locations of the hoof-holds, determine the smallest number of hoof-holds Bessie should use to reach the top.
Bessie参加了爬墙比赛,比赛用的墙宽30000,高H(1001 <= H <= 30,000)。墙上有F(1 <= F <= 10,000)个不同的落脚点(X,Y)。 (0,0)在左下角的地面。所有的落脚点至少相距300。Bessie知道至少有一条路可以上去。 Bessie只能从一个落脚点爬到另一个距离不超过1000的落脚点,她可以向上下左右四个方向爬行。同样地,一旦她到达了一个高度 至少有H-1000的落脚点,她可以敏捷地爬到墙顶上。Bessie一开始可以在任意一个高度不超过1000的落脚点上。问Bessie至少攀爬多少次.这里两个点的距离都是欧几里得距离
Input
Line 1: Two space-separated integers, H and F.
Lines 2..F+1: Each line contains two space-separated integers (respectively X and Y) that describe a hoof-hold. X is the distance from the left edge of the climbing wall; Y is the distance from the ground.
Output
- Line 1: A single integer that is the smallest number of hoof-holds Bessie must use to reach the top of the climbing wall.
Sample Input
3000 5
600 800
1600 1800
100 1300
300 2100
1600 2300
Sample Output
3
HINT
分别经过(600,800), (100,1300), (300,2100)
大力爆搜建图,加最短路。虽然是O(N^2)的复杂度,不过bzoj开了5s,勉勉强强跑过去,成功占据rank倒数前十(被自己菜哭)
#include<cmath>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define sqr(x) ((x)*(x))#define inf 0x7f7f7f7fusing namespace std;typedef long long ll;typedef unsigned int ui;typedef unsigned long long ull;inline int read(){ int x=0,f=1;char ch=getchar(); for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1; for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0'; return x*f;}inline void print(int x){ if (x>=10) print(x/10); putchar(x%10+'0');}const int N=1e5,limit=1e3;int pre[N*2+10],child[N*2+10],now[N+10];int X[N+10],Y[N+10],dis[N+10],h[N+10];bool vis[N+10];int H,n,tot;int dist(int a,int b){return sqr(X[a]-X[b])+sqr(Y[a]-Y[b]);}void join(int x,int y){pre[++tot]=now[x],now[x]=tot,child[tot]=y;}void build(){ for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ if (i==j) continue; if (sqrt(dist(i,j))<=limit) join(i,j); } if (Y[i]<=limit) join(0,i); if (H-Y[i]<=limit) join(i,n+1); }}void SPFA(int x){ int head=0,tail=1; memset(dis,63,sizeof(dis)); h[1]=x,vis[x]=1,dis[x]=0; while (head!=tail){ if (++head>N) head=1; int Now=h[head]; for (int p=now[Now],son=child[p];p;p=pre[p],son=child[p]) if (dis[son]>dis[Now]+1){ dis[son]=dis[Now]+1; if (!vis[son]){ if (++tail>N) tail=1; h[tail]=son,vis[son]=1; } } vis[Now]=0; }}int main(){ H=read(),n=read(); for (int i=1;i<=n;i++) X[i]=read(),Y[i]=read(); build(); SPFA(0); printf("%d\n",dis[n+1]-1); return 0;}
- [Usaco2006 Open]The Climbing Wall 攀岩
- bzoj 1665: [Usaco2006 Open]The Climbing Wall 攀岩(最短路)
- bzoj 1665: The Climbing Wall 攀岩 最短路
- BZOJ1727: [Usaco2006 Open]The Milk Queue 挤奶队列
- BZOJ 1727 [Usaco2006 Open]The Milk Queue 挤奶队列
- bzoj1727 [Usaco2006 Open]The Milk Queue 挤奶队列 贪心
- bzoj1663 [Usaco2006 Open]赶集
- BZOJ1663: [Usaco2006 Open]赶集
- 【bzoj1663】[Usaco2006 Open]赶集 dp
- Pink Floyd -- The Wall
- hdu2124 Repair the Wall
- hdu1543 Paint the Wall
- hdu1543 Paint the Wall
- Repair the Wall+贪心
- A. The Wall
- Paint The Wall hdu4391
- codeforces The Wall - 题解
- Repair the Wall
- 软件设计师考后总结
- 表单添加以及删除(jquery)
- 编写一个数组去重的方法
- 托起时代的云—云计算
- 过滤器实现模糊查询
- [Usaco2006 Open]The Climbing Wall 攀岩
- 如何修炼坚韧的学习生命力
- 建造者模式
- MVP+观察者模式
- jQuery登录增删改查小demo
- 无人机驾驶员培训学习记录(十一)
- 太多的串口设备
- 常用工具的使用方法
- HTTP请求头、响应头和状态码