题面:

传送门

思路:

看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉

而且这道题只有去首都和离开首都的机场

因此考虑计算去首都的飞机的前缀最小花费,以及离开首都的飞机的最小后缀花费

都计算出来以后,对于每一个开始开会的时间t,用pre[t-1]+suf[t+k]来更新答案即可

Code:

到处都要用long long......

最后我只好ctrl+R,替换int为longlong了......

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
const ll inf=1e15;
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll n,m,K,cnta,cntb,cntva,cntvb;
ll pre[],suf[];ll suma,sumb;
bool vis[];ll minn[];
struct flight{
ll to,cost,t;
}a[],b[];
bool cmp(flight l,flight r){
return l.t<r.t;
}
bool cmp2(flight l,flight r){
return l.t>r.t;
}
int main(){
ll i,j,t1,t2,t3,t4;ll ans=inf;
n=read();m=read();K=read();
for(i=;i<=m;i++){
t1=read();t2=read();t3=read();t4=read();
if(t2!=) a[++cnta]=(flight){t2,t4,t1};
else b[++cntb]=(flight){t3,t4,t1};
}
if(cnta<n||cntb<n){
puts("-1");return ;
}
sort(a+,a+cnta+,cmp);sort(b+,b+cntb+,cmp2);
for(i=;i<=n;i++) suma+=(ll)(minn[i]=inf);
t1=;pre[]=inf;
for(i=;i<=cnta;i++){
for(j=t1+;j<a[i].t;j++) pre[j]=pre[j-];
t1=a[i].t;
if(!vis[a[i].to]) vis[a[i].to]=,cntva++;
suma-=minn[a[i].to]-min(minn[a[i].to],a[i].cost);
minn[a[i].to]=min(minn[a[i].to],a[i].cost);
if(cntva==n) pre[t1]=suma;
else pre[t1]=-;
}
memset(vis,,sizeof(vis));
for(i=;i<=n;i++) sumb+=(ll)(minn[i]=inf);
t1=;suf[t1]=inf;
for(i=;i<=cntb;i++){
for(j=t1-;j>b[i].t;j--) suf[j]=suf[j+];
t1=b[i].t;
if(!vis[b[i].to]) vis[b[i].to]=,cntvb++;
sumb-=minn[b[i].to]-min(minn[b[i].to],b[i].cost);
minn[b[i].to]=min(minn[b[i].to],b[i].cost);
// cout<<"calc "<<i<<ends<<t1<<ends<<cntvb<<ends<<sumb<<endl;
if(cntvb==n) suf[t1]=sumb;
else suf[t1]=-;
}
// for(i=1;i<=20;i++) cout<<suf[i]<<endl;
t1--;while(t1) suf[t1]=suf[t1+],t1--;
// for(i=1;i<=20;i++) cout<<suf[i]<<endl;
// for(i=1;i<=20;i++) cout<<pre[i]<<endl;
for(i=;i<=cnta;i++){
t1=a[i].t;t2=t1+K+;
if(~pre[t1]&&~suf[t2]) ans=min(ans,(ll)pre[t1]+(ll)suf[t2]);
}
if(ans>=inf) printf("-1");
else printf("%I64d\n",ans);
}

cf 853 B Jury Meeting [前缀和]的更多相关文章

  1. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises) D. Jury Meeting(双指针模拟)

    D. Jury Meeting time limit per test 1 second memory limit per test 512 megabytes input standard inpu ...

  2. Jury Meeting CodeForces - 854D

    Jury Meeting CodeForces - 854D 思路:暴力枚举会议开始的那一天(只需用所有向0点飞的航班的那一天+1去枚举即可),并计算所有人此情况下去0点和从0点出来的最小花费. 具体 ...

  3. Jury Meeting CodeForces - 854D (前缀和维护)

    Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...

  4. Codeforces 853B Jury Meeting (差分+前缀和)

    <题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到 ...

  5. CF F. Shovels Shop(前缀和预处理+贪心+dp)

    F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  7. 「题解」「CF853B」Jury Meeting

    目录 题目 思路 代码 题目 传送门 思路 十分巧妙的差分前缀和好题. 题目板块完结之后,我看到有很多处理此题的方法,但总感觉差分前缀和比较巧妙. 首先,通过输入我们可以将每个人能在 \(0\) 号点 ...

  8. codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)

    题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费? 用数组arr1[i]记录在第i天人到齐的最小花费.arr2[i]记录第i天之后才有人开始走的最小花费.然后取a ...

  9. cf 853 D Michael and Charging Stations [dp]

    题面: 传送门 思路: 看到题目,第一思路是贪心,但是我很快就否决掉了(其实分类贪心也可以做) 然后就想,贪心不能解决的状态缺失,是否可以用dp来解决呢? 事实证明是可以的 我们设dp[i][j]表示 ...

随机推荐

  1. 仅用移动开发服务:开发native应用

    不花一分钱,就可以做native应用开发,这在以前是根本不敢想象的事儿.然而在今天,移动开发工具和服务已经五花八门,聪明的开发者只要随心所欲的抓取几个顺手的,就能完成native开发.今天给大家介绍的 ...

  2. 初尝微信小程序1-特点

    微信小程序特点:1.不需要下载安装即可使用 2.用户用完即走,不用关心是否安装太多应用 3.应用将无处不在,随时可用 适合开发的小程序类型:1.简单的用完即走的应用 2.低频的应用 3.性能要求不高的 ...

  3. c++ 循环程序的作业,2017年10月10日作业题。

    作业1: 需求:输出一个由 * 符号所组成的矩形,要求每行有50个 * ,一共需要有60行.使用双重for循环完成. 作业2: 需求:输出一个由 * 符号所组成的三角形,要求第一行一个 * ,第二行 ...

  4. oc描述器排序

    int main(int argc, const char * argv[]) { @autoreleasepool { NSArray *array = @[CreateDict(@"王思 ...

  5. JS控制台的使用

    1.快捷键F12可直接进入控制台(或者单机右键->检查)用于bug调试 2.控制台如图: Elements:表示所有的js元素 Console:常用的有如下几个功能: ①console.log: ...

  6. 选择 NoSQL 数据库需要考虑的 10 个问题

    那么我为什么要写这篇文章呢? 是因为我认为NoSQL解决方案不如RDBMS解决方案吗?当然不! 是因为我专注于SQL的做事方式,而不想陷入一种相对较新的技术的不确定性吗?不,也不是!事实上,我非常兴奋 ...

  7. 【PHP】Thinkphp 七牛云API对接

    访问一个网站,图片的流量占的比例是非常高的!在你的服务器硬盘上,图片占的容量也是非常高的. 如果要搞一个图片非常多,用户量又很庞大的网站,那么,得花多少钱烧在服务器上? 这种时候,当然要用第三方图片存 ...

  8. JZOJ 5838. 旅游路线 最大子段和

    5838. 旅游路线 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Goto ProblemSet Descrip ...

  9. MongDB之各种删除操作

    接口IMongDaoDelete: package com.net.test.mongdb.dao; public interface IMongDaoDelete { public void del ...

  10. haystack(django的全文检索模块)

    haystack haystack是django开源的全文搜索框架 全文检索:标题可以检索,内容也可以检索 支持solr ,elasticsearch,whoosh 1.注册app 在setting. ...