Fzu 2160 Mountain climbing 模拟
来源:互联网 发布:中华大字典软件 编辑:程序博客网 时间:2024/05/04 17:37
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2160
题目大意:给你N座山的位置X和高度Y,如果两座山的山顶连线不和其它山相交,则从一座山至另外一坐山花费1单位时间,问你从每座山到最后一座山花费的时间。
解题思路:假设山为a,b,。。。,刚开始读完题一直以为必须a的高度比b高且a,b的山顶连线不和其它山相交,才能花费一单位时间过去,后来才知道高度无限制。那现在高度无限制,我们就从最后一座山N开始向前找,找到每座山X到最后一座山N的时间,同时记录X能直接到达的最远的山的位置next【X】,下次再访问完X之后直接访问next【X】就行了,当到某座山x之后不能一步到达后面的山,那么时间就是1+step【x】;因为从当前山到x只需要1时间,而从x到N在前面已经计算出来了。
同时需要说的是:对于三点坐标,如何判断中间点b与线段ab的关系?
如果(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)<0 说明b点在线段ac的下方;
如果(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)=0 说明b点在线段ac的上;
如果(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)<0 说明b点在线段ac的上方;
代码如下:
#include<stdio.h>#include<string.h>struct node{__int64 x,y,next,step;//x,y为坐标,next为当前点能到达最远点的坐标,step为到达最后一座山的时间}s[100002];bool judge(node a,node b,node c)//判断点b相对于a,c连线的位置{ if((b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)<0) return true; return false;}int main(){ int T,n,cnt=1; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%I64d%I64d",&s[i].x,&s[i].y); s[n].step=0; s[n-1].step=1; s[n-1].next=n; for(int i=n-2;i>0;i--) { int temp=i+1; while(temp<n&&judge(s[i],s[temp],s[s[temp].next])) temp=s[temp].next;//找到第一个无法直接到达的点 s[i].next=temp;//更新当前点的next s[i].step=s[temp].step+1; } printf("Case#%d:",cnt++); for(int i=1;i<=n;i++) printf(" %I64d",s[i].step); printf("\n"); }}
0 0
- Fzu 2160 Mountain climbing 模拟
- FOJ 2160 Mountain climbing
- Mountain climbing
- FZU 2019 Mountain Number
- fzu 2109 Mountain Number
- FZU - 2109 Mountain Number
- foj 2014-4月赛 Mountain climbing
- FZU 2109 Mountain Number ---数位dp
- FZU 2109 Mountain Number_数位DP
- FZU - 2109 Mountain Number 数位DP
- FZU-2109 Mountain Number(数位dp)
- FZU 2109 Mountain Number (数位DP)
- 贪心——洛谷 P1561 [USACO12JAN]爬山Mountain Climbing
- 洛谷P1561 [USACO12JAN]爬山Mountain Climbing(贪心)
- fzu 2109 Mountain Number 数位DP 记忆化搜索
- FZU 2109 Mountain Number [数位DP]【动态规划】
- fzu 2109 Mountain Number 数位DP 递推
- Fzu 2166 inversion 模拟
- 单片机加密思路,相当不错的帖子
- 工作中遇到的SQL二(更新中)
- Javascript 中innerHTML和innerText的区别
- failed to create the java virtual machine
- spring 任务调度 Quartz 表达式
- Fzu 2160 Mountain climbing 模拟
- URLClassLoader使用方法和实例
- C中经典的helloworld程序
- open gl 相关网址
- C/C++日常学习总结(第六篇)多基派生引起的虚函数访问二义性问题&重载,覆盖,隐藏的区别
- 将特殊格式的NSSring转换成NSDate
- Device Tree常用方法解析
- 在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框
- android 将图片内容解析成字节数组,将字节数组转换为Ima ...