cf 853 B Jury Meeting [前缀和]
题面:
思路:
看完题目以后,首先有一个结论:每个人都是先去到首都,等待开会,开会结束以后再一个个走掉
而且这道题只有去首都和离开首都的机场
因此考虑计算去首都的飞机的前缀最小花费,以及离开首都的飞机的最小后缀花费
都计算出来以后,对于每一个开始开会的时间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 [前缀和]的更多相关文章
- 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 ...
- Jury Meeting CodeForces - 854D
Jury Meeting CodeForces - 854D 思路:暴力枚举会议开始的那一天(只需用所有向0点飞的航班的那一天+1去枚举即可),并计算所有人此情况下去0点和从0点出来的最小花费. 具体 ...
- Jury Meeting CodeForces - 854D (前缀和维护)
Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...
- Codeforces 853B Jury Meeting (差分+前缀和)
<题目链接> 题目大意: 有$ n(n<=1e5)$个城市和一个首都(0号城市),现在每个城市有一个人,总共有$ m (m<=1e5)$次航班,每个航班要么从首都起飞,要么飞到 ...
- CF F. Shovels Shop(前缀和预处理+贪心+dp)
F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- CF 1003C Intense Heat【前缀和/精度/双层暴力枚举】
The heat during the last few days has been really intense. Scientists from all over the Berland stud ...
- 「题解」「CF853B」Jury Meeting
目录 题目 思路 代码 题目 传送门 思路 十分巧妙的差分前缀和好题. 题目板块完结之后,我看到有很多处理此题的方法,但总感觉差分前缀和比较巧妙. 首先,通过输入我们可以将每个人能在 \(0\) 号点 ...
- codeforces 853b//Jury Meeting// Codeforces Round #433 (Div. 1)
题意:几个人要去一个城市k天,现给出各航班的日期和花费,让这n个人能相会k天的最小花费? 用数组arr1[i]记录在第i天人到齐的最小花费.arr2[i]记录第i天之后才有人开始走的最小花费.然后取a ...
- cf 853 D Michael and Charging Stations [dp]
题面: 传送门 思路: 看到题目,第一思路是贪心,但是我很快就否决掉了(其实分类贪心也可以做) 然后就想,贪心不能解决的状态缺失,是否可以用dp来解决呢? 事实证明是可以的 我们设dp[i][j]表示 ...
随机推荐
- Airflow 调度基础
1. Airflow Airflow是一个调度.监控工作流的平台.用于将一个工作流制定为一组任务的有向无环图(DAG),并指派到一组计算节点上,根据相互之间的依赖关系,有序执行. 2. 安装 pip安 ...
- 6.3安装squid
1. Frist you need to install Development tools #yum groupinstall "Development Tools" 2. Ge ...
- System.Threading
线程:定义为可执行应用程序中的基本执行单元. 应用程序域:一个应用程序内可能有多个线程. 上下文:一个线程可以移动到一个特定的上下文的实体 导入命名空间: //得到正在执行这个方法的线程 Thread ...
- Perl_实用报表提取语言
Perl 语法 - 基础 perl语言的核心是正则表达式,在文本处理上非常有优势,与python类似,但语法不同,perl的语法很灵活,用多了才会觉得好用. 常用知识点总结: perl语法类似于C ...
- python用requests请求,报SSL:CERTIFICATE_VERIFY_FAILED错误。
response = requests.request("GET", url, headers=headers, params=querystring, verify=False) ...
- python2, 3环境变量配置(win10下)
1.找到此电脑,右击点击属性 2.左边侧栏,高级系统设置 3.系统属性中点击高级 4.点击环境变量 5.可以看到 某某某用户变量和系统变量两个方框 其中,系统变量是要你在打开cmd是用管理员身份运行所 ...
- MongDB之各种查询操作
接口IMongDaoFind: package com.net.test.mongdb.dao; public interface IMongDaoFind { public void findUse ...
- relu函数是否存在梯度消失问题以及relu函数的死亡节点问题
relu函数是否存在梯度消失问题以及relu函数的死亡节点问题 存在,在小于的时候,激活函数梯度为零,梯度消失,神经元不更新,变成了死亡节点. 出现这个原因可能是因为学习率太大,导致w更新巨大,使得输 ...
- pandas知识点(处理缺失数据)
pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据: In [14]: string_data = Series(['aardvark','artichoke',np.nan,'avocad ...
- Flask初学者:g对象,hook钩子函数
Flask的g对象 作用:g可以可以看作是单词global的缩写,使用“from flask import g”导入,g对象的作用是保存一些在一次请求中多个地方的都需要用到的数据,这些数据可能在用到的 ...