HDU 1050 Moving Tables
来源:互联网 发布:台湾留学生在大陆知乎 编辑:程序博客网 时间:2024/06/05 19:01
题意:给定T组样例,每一组给定一个n,接下来n行每行给出s和t,代表将桌子从s房间到b房间,移动时占用对应段的走廊,所以同一段走廊不能同时被使用,一次移动需要10分钟。问最短时间。
思路:贪心。选取第一组未被移动的s和t,然后不断选取能并列移动的s和t,移动将改变目前的t,碰到的第一组不能并列移动的作为下一批移动的第一个。
注意点:s不一定大于t。房间号不重要,关键是占据了哪一段走廊。
代码:
#include<bits/stdc++.h>using namespace std;const int MAX_N = 1000+5;typedef pair<int,int> pp;pp p[MAX_N];int n;bool cmp(pp p1,pp p2){ return p1.first<p2.first;}bool sol(){ for(int i=0;i<n;i++){ if(p[i].first!=-1) return false; } return true;}int main(){ int T; cin>>T; while(T--){ cin>>n; for(int i=0;i<n;i++){ cin>>p[i].first>>p[i].second; if(p[i].first>p[i].second) swap(p[i].first,p[i].second); } sort(p,p+n,cmp); int ans=0,en,st=0; while(++ans){ en=p[st].second; p[st].first=-1; int flag=1; for(int i=st;i<n;i++){ if(p[i].first!=-1){ if(flag){ if((p[i].first%2==1&&en>=p[i].first)||(p[i].first%2==0&&en>=p[i].first-1)){ st=i; flag=0; } } if((p[i].first%2==1&&en<p[i].first)||(p[i].first%2==0&&en<p[i].first-1)){ en=p[i].second; p[i].first=-1; } } } if(sol()) break; } cout<<ans*10<<endl; } return 0;}
0 0
- HDU 1050 Moving Tables
- hdu 1050 moving tables
- HDU-1050 Moving Tables
- hdu-1050-Moving Tables
- HDU 1050 Moving Tables
- HDU 1050 Moving Tables
- hdu 1050 moving tables
- hdu 1050 Moving Tables
- hdu 1050 Moving Tables
- hdu 1050 Moving Tables
- HDU (1050) Moving Tables
- HDU--1050 -- Moving Tables
- hdu 1050 Moving Tables
- hdu 1050 Moving Tables
- HDU 1050 Moving Tables
- hdu-1050 Moving Tables
- hdu 1050 Moving Tables
- HDU 1050 Moving tables
- 小白弱弱的问下各位大虾,关于STM32中的闪存存储器的问题
- 秀场直播风头正劲,网易视频云助力破除音视频技术壁垒
- #感恩节技术博客第一弹#Deep learning&&Face recognition
- 学习-H3C
- 分离元器件搭建BUCK分析
- HDU 1050 Moving Tables
- NS3
- linux学习
- NS-3中计算packet延迟(每一个包的延迟)
- springboot整合jedisCluster
- rsyslog及logrotate小结
- 在MyEclipse上安装windowBuilder插件
- NS-3中的OnOffApplicaion作为协议仿真的CBR源
- ns3-3