Code Forces 538 C. Tourist's Notes(贪心)
2015-07-25 16:19
429 查看
Description
一个旅行者在外旅行n天,第i天所在地方的海拔为hi,相邻两天的海拔之差不超过1。给出部分天数的海拔,问这个人在这n天中,所到地方的最高海拔是多少?如果根据给出的数据不符合题意描述,即出现相邻两天的海拔之差超过1,输出“IMPOSSIBLE”
Input
第一行两个整数n和m分别表示旅行者旅行天数和给出海拔的天数,之后m行每行两个整数d和h表示第d天海拔为h
Output
输出最高海拔,如果数据不符则输出IMPOSSIBLE
Sample Input
8 2
2 0
7 0
Sample Output
2
Solution
简单贪心,两个已经给出海拔的日期之间前半段往上爬,后半段往下爬才能到达最高海拔
Code
一个旅行者在外旅行n天,第i天所在地方的海拔为hi,相邻两天的海拔之差不超过1。给出部分天数的海拔,问这个人在这n天中,所到地方的最高海拔是多少?如果根据给出的数据不符合题意描述,即出现相邻两天的海拔之差超过1,输出“IMPOSSIBLE”
Input
第一行两个整数n和m分别表示旅行者旅行天数和给出海拔的天数,之后m行每行两个整数d和h表示第d天海拔为h
Output
输出最高海拔,如果数据不符则输出IMPOSSIBLE
Sample Input
8 2
2 0
7 0
Sample Output
2
Solution
简单贪心,两个已经给出海拔的日期之间前半段往上爬,后半段往下爬才能到达最高海拔
Code
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<functional> using namespace std; int main() { int n,m,d1,d2,h1,h2,Max,flag=1; scanf("%d%d%d%d",&n,&m,&d1,&h1); Max=h1; for(int i=1;i<m;i++) { scanf("%d%d",&d2,&h2); if(abs(h2-h1)>d2-d1)//数据不符 flag=0; else Max=max(Max,(d2-d1+h1+h2)/2);//可能的最高海拔 d1=d2; h1=h2; } Max=max(Max,n-d1+h1);//最后几天一直往高出爬的情况 if(m==1)//只给出一天海拔的情况 printf("%d\n",max(d1+h1-1,h1+n-d1)); else { if(flag) printf("%d\n",Max); else printf("IMPOSSIBLE\n"); } return 0; }
相关文章推荐
- 二叉树的创建和遍历
- android仿ios时间控件
- 噩梦射手5 角色血量 死亡 重新加载
- iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现
- 庞贝中文离线地图App上线
- jQuery菜单插件用法实例
- uva 10410 - Tree Reconstruction
- 深入了解View(五)—— 视图状态及重绘流程分析
- 跨平台的目录遍历实现方法(windows和linux已经测试)
- Android 键盘弹出 页面整体上移
- 简单贴一下关于控制软键盘的问题吧
- XCode创建C++工程
- 优化gcd
- Redis命令执行全过程
- 资金安全责任险对个人账户负责?
- POJ -2503 Babelfish
- java数据结构之栈
- map与pagelayout同步新方法
- Linux在device is busy处理
- Python 3语法小记(九) 异常 Exception