2016-2017 ACM-ICPC Northeastern European Regional Contest Problem E. Expect to Wait
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229509
时间限制:2s
空间限制:512MB
题目大意:
在一个车站中有若干人在队列中等待车辆,求所有人等待时间的期望值
首先给定n和q,随后是n行操作:
"+ t k":在t时刻有k个人加入队列等待车辆
"- t k":在t时刻有k个人乘车离开队列
然后是q个数字代表在初始时刻车站中有多少个车在等待
求出每个询问对应的所有人的等待时间,如果有人始终等不到车则输出"INFINITY"
样例:

代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <complex>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<int,int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=(a);i<(b);i++)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define pi acos(-1.0)
#define mem0(a) memset(a,0,sizeof(a))
#define memf(b) memset(b,false,sizeof(b))
#define ll long long
#define eps 1e-10
#define inf 1e17
#define maxn 101010
int n, q;
int a[maxn], t[maxn];
int s[maxn];
int b[maxn], cnt;
long long ans[maxn];
struct node{
int x, id;
bool operator < (const node &rhs) const{
return x < rhs.x;
}
}c[maxn];
bool cmp(int i, int j){
return s[i] > s[j];
}
int main()
{
freopen("expect.in", "r", stdin);
freopen("expect.out", "w", stdout);
scanf("%d%d", &n, &q);
for(int i = 1; i <= n; i++){
char op[5];
scanf("%s%d%d", op, &t[i], &a[i]);
if(op[0] == '-') a[i] = -a[i];
}
for(int i = 1; i <= n; i++){
s[i] = s[i-1] + a[i];
if(i < n) t[i] = t[i+1] - t[i];
}
// for(int i = 1; i <= n; i++){
// printf("s[%d] = %d, t[%d] = %d\n", i, s[i], i, t[i]);
// }
long long sum1 = 0, sum2 = 0;
for(int i = 1; i <= n; i++){
if(s[i] < 0){
b[++cnt] = i;
sum1 += 1LL*(-s[i])*t[i];
sum2 += t[i];
}
}
sort(b + 1, b + cnt + 1, cmp);
int j = 1;
long long k = 0;
for(int i = 1; i <= q; i++){
scanf("%d", &c[i].x);
c[i].id = i;
}
sort(c + 1, c + q + 1);
for(int i = 1; i <= q; i++){
int x = c[i].x;
while(j <= cnt && (-s[b[j]]) <= x){
sum1 -= 1LL*(-s[b[j]]) * t[b[j]];
sum2 -= t[b[j]];
++j;
}
if(s[n] + x < 0){
ans[c[i].id] = -1;
}
else{
ans[c[i].id] = sum1 - x * sum2;
}
}
for(int i = 1; i <= q; i++){
if(ans[i] == -1) printf("INFINITY\n");
else printf("%lld\n", ans[i]);
}
return 0;
}
2016-2017 ACM-ICPC Northeastern European Regional Contest Problem E. Expect to Wait的更多相关文章
- ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbilisi, November 24, 2010
ACM ICPC 2010–2011, Northeastern European Regional Contest St Petersburg – Barnaul – Tashkent – Tbil ...
- ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków
ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...
- 2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17)
2017-2018 ACM-ICPC Northern Eurasia (Northeastern European Regional) Contest (NEERC 17) A 题意:有 n 个时刻 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)G GCD Guessing Game
G: 要你去才Paul的年龄,Paul的年龄在1~n之间,你每猜一个Paul会告诉你,你猜的这个数和他年龄的gcd,问在最坏情况下最少要猜多少次. 题解: 什么是最坏情况,我们直到如果他的年龄是1的话 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)E Eve
E: 模拟题,一开始有n个人(有男有女),对于子女来说线粒体DNA是继承母亲的.然后有m个操作(按时间顺序),一种就是给了父亲,母亲的ID,生了一个孩子(编号从n+1开始往下):还有一个就是 -x , ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)K Kingdom Roadmap
K: 给你n个点以及n-1的条边, 问你最少要加多少条边,使得每两个点割去一条联通的边,还可以使的这两个点连通. 有个一个结论,最少添加的边数为(叶子节点数+1)/ 2. 我们可以只考虑叶子节点数应该 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)B Binary Encoding
B: 现在有一种新的2进制表示法,要你求出0~m-1的每个数的表示. 规则如下:n 是满足 m<=2n 最小数. 而0~m-1的数只能够用n-1个位和n个位来表示. 对于n个位表示的数来说不能有 ...
- ACM ICPC 2011-2012 Northeastern European Regional Contest(NEERC)A ASCII Area
A: 给你一个矩阵求'/' 和 '\' 围成的图形,简单签到题,有一些细节要考虑. 题解:一行一行的跑,遇到'/'和'\' 就加0.5, 在面积里面的'.' 就加1.用一个flag来判断是否在围住的图 ...
- Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)
题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...
随机推荐
- ubuntu远程桌面
用Linux已经有很长一段时间,但主要用于嵌入式开发(用交叉工具链进行版本编译),所以用命令行就可以了,而且敲的最多的命令就是make.最近开始搭建TensorFlow的开发环境,大部分工作都是命令行 ...
- 【npm 指令】 (不定时持续更新)
查看webpack所有的版本及更多信息 npm info webpack 查看webpack所有的版本 npm info webpack versions 查看webpack最新的版本 npm vie ...
- Docker搭建NSQ实时分布式消息集群
NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行 ...
- SQLSERVER字符串处理函数
sqlserver提供了一系列字符串处理函数:substring.left.right.len.charindex.patindex.replace.replicate.stuff.upper.low ...
- 2015526 《Java程序设计》实验二实验报告
2015526 <Java程序设计>实验二实验报告 一.单元测试和TDD 用程序解决问题时,要学会写以下三种代码: 伪代码 产品代码 测试代码 正确的顺序应为:伪代码(思路)→ 测试代码( ...
- C语言 结构体学习
结构体的学习 struct 结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合. 结构中可以使用不同的数据类型. 结构说明和结构变量定义 在Turbo C中, 结构也是一种数据类型,可以 ...
- 20155239 2016-2017-2 《Java程序设计》第10周学习总(2017-04-22 16:26
教材学习 1.基本概念划分 OIS的七层协议: 应用层.表示层.会话层.运输层.网络层.数据链路层.物理层. OIS的五层协议: 应用层.运输层.网络层.数据链路层.物理层. 由下往上介绍如下: 2. ...
- 20155313 实验三《Java面向对象程序设计》实验报告
一.实验内容 XP基础 XP核心实践 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器>课程 2.完成实验.撰写实验报 ...
- 客户端与服务器端同步Evernote
原文地址:http://www.zhihu.com/question/20238731 Evernote的同步方式是 以本地为基准同步到网络 还是 以网络为基准同步到本地 的? 若客户端从未与服务器端 ...
- day2 RHCE
1.配置SELINUX 在system1和system2上要求SeLinux的状态为enforcing.要求系统重启后依然生效. server [root@server0 ~]# getenforce ...