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]表示 ...
随机推荐
- BZOJ 1229: [USACO2008 Nov]toy 玩具
BZOJ 1229: [USACO2008 Nov]toy 玩具 标签(空格分隔): OI-BZOJ OI-三分 OI-双端队列 OI-贪心 Time Limit: 10 Sec Memory Lim ...
- 问题 M: 克隆玩具
题目描述 你只有一个A类型玩具,现在有个有两种功能的机器:1. 加工一个A类型的玩具能够再得到一个A类型的玩具和一个B类型的玩具.2. 加工一个B类型的玩具,能得到两个B类型的玩具. 问经过多次加工之 ...
- Portal的认证方式
不同的组网方式下,可采用的 Portal 认证方式不同.按照网络中实施 Portal 认证的 网络层次来分,Portal 的认证方式分为两种:二层认证方式和三层认证方式. 二层认证方式.这种方式支持在 ...
- Struts动态联动效果
<%@page contentType="text/html;charset=utf-8"%> <%@ include file="../../comm ...
- 告诉你今年是哪个生肖年的java程序
package com.swift; import java.util.Scanner; public class ChineseYear { public static void main(Stri ...
- 2018.11.3 Nescafe18 T1 七夕祭
题目 背景 七夕节因牛郎织女的传说而被扣上了「情人节」的帽子.于是 TYVJ 今年举办了一次线下七夕祭.Vani 同学今年成功邀请到了 cl 同学陪他来共度七夕,于是他们决定去 TYVJ七夕祭游玩. ...
- bat 服务启动脚本
当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...
- 认识mysql(3)
认识mysql第三篇,发出的内容适合初学者,如果能持续关注我的博客,可以全面的掌握mysql的常用知识,后续我也会陆续发出python相关的知识,关注我,和我一共进步吧! 1.SQL查询 1.执行顺序 ...
- shell脚本:变量,文件判断,逻辑运算等纪要
shell脚本中的变量定义,引用各有不同的方式,除此之外,很常用的有文件属性判断,逻辑运算,数值运算等,下面记录一下它们的属性作用 变量 shell变量的定义分为两种:一种是直接赋值定义,另一种是嵌套 ...
- nginx的缓存服务
都知道缓存的目的是为了减小服务端的压力,可以在客户端直接取到数据 客户端---------------nginx(代理缓存)------------------服务端 代理缓存的描述: 就是客户端发送 ...