POJ 1083 Moving Tables 思路 难度:0
2015-07-12 00:58
363 查看
http://poj.org/problem?id=1083
这道题题意是有若干段线段,每次要求线段不重叠地取,问最少取多少次.
因为这些线段都是必须取的,所以需要让空隙最小
思路:
循环直到线段全部取完,对于某个刚取得线段ij,下一个线段km取起点k尽量靠近j且满足k>j的.记录循环次数cnt,答案是cnt*10
注意:
房间是相对的,也就是说对于奇数房间号,利用的走廊相当于对应的偶数房间号开始的那一段路程,
一段路程的开头不能是另外一段路程的结尾.
这道题题意是有若干段线段,每次要求线段不重叠地取,问最少取多少次.
因为这些线段都是必须取的,所以需要让空隙最小
思路:
循环直到线段全部取完,对于某个刚取得线段ij,下一个线段km取起点k尽量靠近j且满足k>j的.记录循环次数cnt,答案是cnt*10
注意:
房间是相对的,也就是说对于奇数房间号,利用的走廊相当于对应的偶数房间号开始的那一段路程,
一段路程的开头不能是另外一段路程的结尾.
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 400; int n; typedef pair<int,int> P; P a[maxn]; bool vis[maxn]; int main() { freopen("data.in","r",stdin); int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i = 0;i < n;i++) { scanf("%d%d",&a[i].first,&a[i].second); if(a[i].first&1)a[i].first++; if(a[i].second&1)a[i].second++; if(a[i].first>a[i].second)swap(a[i].first,a[i].second); } sort(a,a+n); memset(vis,false,sizeof(vis)); int cnt = 0; for(int st = 0;st < n;st++) { if(vis[st])continue; vis[st] = true; cnt++; for(int i = st + 1,e = a[st].second;i < n;i++) { if(a[i].first <= e || vis[i])continue; vis[i] = true; e = a[i].second; } } printf("%d\n",cnt * 10); } return 0; }
相关文章推荐
- 前端工程架构探讨
- JQuery UI——进度条
- gcc命令中参数c和o混合使用的详解
- 用U盘制作启动盘后空间变小的恢复方法,清除U盘启动盘空间
- 对象的序列化与反序列化
- 在Android项目中导入的很普通的包都无法解析(把android版本选上)
- thymeleaf 解析html时,出现 SAXParseException: The content of elements must consist of well-formed characte
- android中java调用js在4.3版本以上无效的问题
- MVC——母版与分部
- 安装androidstudio时报错the following sdk component was not installed:build-boots21.1.1
- IOS基本学习计划
- yield关键字跟递归结合使用
- Java正则表达式 matchs split replaceAll实例
- 慕课网python基础学习教案(变量和数据类型)
- Linux下SVN安装配置
- Python pypinyin、jieba模块
- java: -source 1.6 中不支持 switch 中存在字符串.....
- Redis内存分配简单分析
- js默认编码方式
- 【Intellij IDEA】eclipse项目导入