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]表示 ...
随机推荐
- 2018.5.25 Oracle相关的函数命令
第03章 函数 1 Oracle的函数 Oracle的函数和java中的方法一样, 能完成一定的功能 2 字符处理类函数 --需求1:把ename字段转换成小写 select lower(ename) ...
- yield 生成器的运行机制
yield 生成器的运行机制 当你问生成器要一个数时,生成器会执行,直至出现 yield 语句,生成器把 yield 的参数给你,之后生成器就不会往下继续运行. 当你问他要下一个数时,他会从上次的状态 ...
- C#的接口基础教程之七 覆盖虚接口
有时候我们需要表达一种抽象的东西,它是一些东西的概括,但我们又不能真正的看到它成为一个实体在我们眼前出现,为此面向对象的编程语言便有了抽象类的概念.C#作为一个面向对象的语言,必然也会引入抽象类这一概 ...
- C#进阶之全面解析Lambda表达式
引言 在实际的项目中遇到一个问题,我们经常在网上搜索复制粘贴,其中有些代码看着非常的简洁,比如Lambda表达式,但是一直没有去深入了解它的由来,以及具体的使用方法,所以在使用的时候比较模糊,其次,编 ...
- java基础面试题:switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
package com.swift; public class Switch_Test { public static void main(String[] args) { /* * switch语句 ...
- iOS 闭包传值 和 代理传值
let vc = ViewController() let navc = UINavigationController(rootViewController: vc) window = UIWindo ...
- CF873B Balanced Substring (前缀和)
CF873B Balanced Substring (前缀和) 蛮有意思的一道题,不过还是.....................因为CF评测坏了,没有试过是否可过. 显然求\(\sum[i][0] ...
- bat 服务启动脚本
当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...
- 无线Web开发
http://am-team.github.io/amg/dev-exp-doc.html
- LCS及方案数(DP)
Description 对于一个序列