博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AtCoder][ARC082]Sandglass 题解
阅读量:5092 次
发布时间:2019-06-13

本文共 2121 字,大约阅读时间需要 7 分钟。

Sandglass

时间限制: 1 Sec 内存限制: 128 MB 

原题链接 

题目描述

We have a sandglass consisting of two bulbs, bulb A and bulb B. These bulbs contain some amount of sand. When we put the sandglass, either bulb A or B lies on top of the other and becomes the upper bulb. The other bulb becomes the lower bulb. 

The sand drops from the upper bulb to the lower bulb at a rate of 1 gram per second. When the upper bulb no longer contains any sand, nothing happens. 
Initially at time 0, bulb A is the upper bulb and contains a grams of sand; bulb B contains X−a grams of sand (for a total of X grams). 
We will turn over the sandglass at time r1,r2,..,rK. Assume that this is an instantaneous action and takes no time. Here, time t refer to the time t seconds after time 0. 
You are given Q queries. Each query is in the form of (ti,ai). For each query, assume that a=ai and find the amount of sand that would be contained in bulb A at time ti.

Constraints 

1≤X≤109 
1≤K≤105 
1≤r1

样例输入

180 

60 120 180 
30 90 
61 1 
180 180

样例输出

60 

120

题解

我的做法是进行带优化的模拟,因为题目输入是确保后一个时间一定大于前一个时间的,所以对于翻转的模拟总共只需要按顺序进行一次便可,最后使用数学结论根据时间和初始质量推出答案。 

需要特别注意的是,这道题会卡输入输出,如果不使用scanf/printf的话,必须要关闭同步锁且不能使用endl,不然会TLE。(可能是华东OJ的原因)

心疼那将近一半被输入输出卡掉的提交QAQ

代码

42 ms/1664 KB(AtCoder) 

80 ms/2080 KB(华东 OJ)

#include 
#include
using namespace std;int x, k, q, t, a, low, up, add, delta, now, ans, r[100007];bool flag;int cal(int tt, int lower = 0, int upper = x) { if (tt < lower) return lower; if (tt > upper) return upper; return tt;}int main() { ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); cin >> x >> k; for (int i = 1; i <= k; i++) cin >> r[i]; cin >> q; low = x, now = 1; while (q--) { cin >> t >> a; while (t >= r[now] && now <= k) { delta = (flag ? 1 : -1) * (r[now] - r[now - 1]), add += delta; up = cal(delta + up), low = cal(delta + low); flag = !flag, now++; } ans = cal((flag ? 1 : -1) * (t - r[now - 1]) + cal(a + add, up, low)); cout << ans << '\n'; } return 0;}

 

转载于:https://www.cnblogs.com/xfl03/p/9385769.html

你可能感兴趣的文章
智力测试
查看>>
Linux修行学习,网站持更
查看>>
C语言实现链表
查看>>
css选择器权值
查看>>
在Openstack上创建并访问Kubernetes集群
查看>>
Java语言基础41-44--泛型与集合
查看>>
jQuery.callbacks 注释
查看>>
将object类型转换成时间,如果能转的话。
查看>>
软件开发文档范例 分类: 软件工程 2015-03-...
查看>>
vue项目实现记住密码功能
查看>>
迭代器 生成器 列表推导式 生成器表达式的一些总结
查看>>
课程设计团队信息
查看>>
编译安装dropbear
查看>>
手动编译Spring4.2源码,以及把源码导入myEclipse中
查看>>
ibatis插入列表
查看>>
struts2 tutor
查看>>
计算器
查看>>
生成和解析二维码(zxing)
查看>>
贪心算法总结
查看>>
APP推广运营经验总结
查看>>