Codeforces Round #433 (Div. 2) D. Jury Meeting
来源:互联网 发布:917发卡源码 编辑:程序博客网 时间:2024/06/06 01:33
题目大意
所有人要去0号城市,并且只坐飞机,飞机只有去0的和从0出发的,所有人要呆k天,问最小机票花费。
题解
对去的和返回的飞机分类排序,去的从早到晚,回来的从晚到早,处理每个时间上所有人去0的最小代价(由于排好序,所以选择时选的是时间最小的),从晚到早选返回的,所有人都满足时算一下代价,最后找出代价最小值。
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') {f=f*10+(ch^48);ch=getchar();} return f;}struct data{ int cost; int pla; int tim;}come[100005],leave[100005];int tot1,tot2,val[100005],finish_time,cou,val2[100005],cou2,finish_time2;long long sum,finish[1000005],sum2,ans=900000000000000000LL;bool cmp(data x,data y){ return x.tim<y.tim;}bool cmp2(data x,data y){ return x.tim>y.tim;}int main(){ int n=read(),m=read(),k=read(); for(int i=1;i<=m;i++) { int d=read(),f=read(),t=read(),c=read(); if(f==0) { leave[++tot1].pla=t; leave[tot1].cost=c; leave[tot1].tim=d; } else if(t==0) { come[++tot2].pla=f; come[tot2].cost=c; come[tot2].tim=d; } } sort(come+1,come+tot2+1,cmp); sort(leave+1,leave+tot1+1,cmp2); for(int i=1;i<=tot2;i++) { if(!val[come[i].pla]) { val[come[i].pla]=come[i].cost; sum+=come[i].cost; cou++; if(cou==n) { finish_time=come[i].tim; finish[come[i].tim]=sum; } } else { if(come[i].cost>=val[come[i].pla]) continue; sum+=come[i].cost; sum-=val[come[i].pla]; val[come[i].pla]=come[i].cost; if(cou==n) { finish[come[i].tim]=sum; } } } for(int i=finish_time;i<=1000000;i++) { if(finish[i]==0) finish[i]=finish[i-1]; } //for(int i=1;i<=20;i++)// cout<<finish[i]<<" "; for(int i=1;i<=tot1;i++) { if(finish_time+k+1>leave[i].tim) break; if(!val2[leave[i].pla]) { cou2++; val2[leave[i].pla]=leave[i].cost; sum2+=leave[i].cost; if(cou2==n&&finish_time+k<=leave[i].tim) { ans=min(ans,sum2+finish[leave[i].tim-k-1]); } } else { if(leave[i].cost>=val2[leave[i].pla]) continue; sum2+=leave[i].cost; sum2-=val2[leave[i].pla]; val2[leave[i].pla]=leave[i].cost; if(cou2==n) { ans=min(ans,sum2+finish[leave[i].tim-k-1]); } } } if(ans==900000000000000000LL||!finish_time||cou2!=n||cou!=n) puts("-1"); else cout<<ans;}
阅读全文
0 0
- Codeforces Round #433Div. 2 D Jury Meeting 优先队列
- Codeforces Round #433 (Div. 2) D. Jury Meeting
- Codeforces Round #433 (Div. 2 D. Jury Meeting 二分
- Codeforces Round #433 (Div. 2) D. Jury Meeting
- Codeforces Round #433 D. Jury Meeting
- Codeforces Round #433 D. Jury Meeting
- Codeforces Round #433 (Div. 2) D. Jury Meeting(思维 贪心 前后缀)
- Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(贪心)
- codeforces 845D Jury Meeting(div.2)
- Codeforces Round #433 (Div. 2) Jury Meeting(贪心)
- Codeforces Round #433 (Div. 2,) Jury Meeting 贪心 + 技巧
- Codeforces Round #433 Jury Meeting
- Codeforces Round #433 (Div. 1) B Jury Meeting(思维)
- Jury Meeting Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)(贪心,预处理?)
- Codeforces Round #433 B. Jury Meeting
- Codeforces Round #433(Div. 1,based on Olympiad of Metropolises)A Planning B Jury Meeting C Boredom
- codeforces 854 D. Jury Meeting(dp水题)
- Codeforces 854 D. Jury Meeting(技巧)
- 【学习摘记】马士兵Servlet&JSP_课时8-课时10_cookie
- Python MySQLdb executemany的使用和遇到的问题
- BootStrap 模态框禁用空白处点击关闭
- 录音知识整理
- The application may be doing too much work on its main thread.
- Codeforces Round #433 (Div. 2) D. Jury Meeting
- Linux下通过终端安装mysql
- swiper+图片自动+无限轮播
- 关于获取Gridcontrol中repositoryItemLookUpEdit的使用
- 选择排序
- python多进程插入redis
- python提示错误TypeError: write() argument must be str, not bytes
- ubuntu部署flask
- 机器学习-特征提取