ARC-082F Sandglass
题意
有一个含有两个玻璃球的沙漏,分别称这两个玻璃球为\(\)和\(\),沙漏中有一些 沙子,当\(\)放在上面时,\(\)就在下面,而\(\)在上面时\(\)就在下面。
沙子总是以\(1\)克每秒的速度从上面的玻璃球漏到下面的玻璃球,直到当上面 的玻璃球没有沙子。
初始时刻是0时刻,此时,\(\)在上面,\(\)在下面,且\(\)中有\(\)克沙子,\(\)中有\( − \)克沙子(沙漏中总共有克沙子)。
沙漏会在\(_1,_2,…,_\)这些时刻反转,我们假设反转是瞬间完成的。
有个询问,每个询问形如\((_,_)\),表示询问当\( = _\)的情况下\(_\)时刻\(\)中的 沙子数。
【数据范围】 保证\(1 ≤ ,_,_ ≤ 109,1 ≤ , ≤ 10^5,0 ≤ _ ≤ \)
做法
显然某一时刻,初始时的\(a\)作为定义域,沙子数量作为值域,是一个分段函数:平,斜率为\(1/-1\),平
维护每个关键点\(t_i\)的函数图象即可
题外话
国集题解讲得好抽象啊...
code
没去写了,贴一份这里的代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define fo(i,l,r) for(int i=l;i<=r;i++)
#define of(i,l,r) for(int i=l;i>=r;i--)
#define fe(i,u) for(int i=head[u];i;i=e[i].next)
using namespace std;
typedef long long ll;
inline int rd()
{
static int x,f;
x=0,f=1;
char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
const int N=100010;
int X,K,Q,T[N],ty;
struct cha{//a1-a2是定义域,[x1,x2]是值域
int a1,x1,a2,x2,x;
bool flag;
inline int get(int a)
{
if(flag)return x;
if(a<=a1)return x1;
if(a>=a2)return x2;
return a-a1+x1;
}
}c[N];
inline void gao(int i,int tim)
{
if(c[i].flag){
c[i].x+=ty*tim;
c[i].x=max(0,c[i].x);
c[i].x=min(c[i].x,X);
return;
}
if(ty==-1){//往下掉
if(c[i].x2<=tim){
c[i].flag=1;c[i].x=0;
return;
}
if(tim>=c[i].x1){ c[i].a1+=tim-c[i].x1; c[i].x1=0; c[i].x2-=tim;}
else{c[i].x1-=tim;c[i].x2-=tim;}
}
else{//往上掉
if(c[i].x1+tim>=X){
c[i].flag=1;c[i].x=X;
return;
}
if(c[i].x2+tim>=X){ c[i].a2-=c[i].x2+tim-X; c[i].x2=X; c[i].x1+=tim;}
else{c[i].x1+=tim; c[i].x2+=tim;}
}
}
int main()
{
freopen("inc.txt","r",stdin);
X=rd();K=rd();
c[0].a1=c[0].x1=0; c[0].a2=c[0].x2=X, c[0].x=0;
c[0].flag=0;ty=-1;
fo(i,1,K)
T[i]=rd(),
c[i]=c[i-1],
gao(i,T[i]-T[i-1]),
ty=-ty;
int j=0;
Q=rd();
ty=-1;
fo(i,1,Q){
int t=rd(),a=rd();
while((j<K&&T[j+1]<=t))j++,ty=-ty;
int ans=c[j].get(a);
ans+=ty*(t-T[j]);
ans=min(ans,X);
ans=max(ans,0);
printf("%d\n",ans);
}
return 0;
}
ARC-082F Sandglass的更多相关文章
- Solution -「ARC 082D」Sandglass
\(\mathcal{Description}\) Link. 一个沙漏内共 \(Xg\) 沙,令初始时上半部分为 A,下半部分为 B.沙漏在 \(r_1,r_2,\cdots,r_n\) 时 ...
- Convert BSpline Curve to Arc Spline in OpenCASCADE
Convert BSpline Curve to Arc Spline in OpenCASCADE eryar@163.com Abstract. The paper based on OpenCA ...
- 黑马程序员——ARC机制总结和用ARC建立模型
ARC 全称:Automatic Reference Counting 使用ARC 只需要在建立一个新的项目的时候把 下面的√打上 Xcode5以后都会默认建议开发者使用ARC机制 新的项目中如果有部 ...
- JSONKit在项目中使用设置(ARC与方法更新)
在项目中经常会遇到解析json的情况,如果有同学想要解析JSON,那么JSONKit可以是一个不错的选择. git中JSONKit 的地址为:https://github.com/johnezang/ ...
- MRC迁移ARC之__block
今日帮着同事把老项目从MRC迁移至ARC,大部分工作无非是删除release,[super dealloc]等方法,只要关闭了MRC编译选项后,编译器能自动帮你检查,block就有一些不一样了,发现许 ...
- Arc GIS engine10.2与VS2012的安装及匹配步骤
本文章已收录于: .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid 1px #ededed } ...
- 关于ARC下需要dealloc的相关内容
今天在项目中使用KVO添加观察者模式的时候,在返回上一级的时候竟然崩了.可是,看了很久,代码没有问题.最后,终于知道了需要添加dealloc 防止以后再出错,所以,便纪录下来.关于ARC下需要手动释放 ...
- iOS 中 ARC 项目 兼容 MRC
iOS 项目中MRC 和 ARC 项目的代码兼容问题: 1.ARC 项目中导入 MRC 第三方类的时候要在此类上添加 -objc-arc. 2.MRC 项目中导入 ARC 类的时候要在次类上添加 -f ...
- ARC内存管理机制详解
ARC在OC里面个人感觉又是一个高大上的牛词,在前面Objective-C中的内存管理部分提到了ARC内存管理机制,ARC是Automatic Reference Counting---自动引用计数. ...
- objective-c 语法快速过(7)编译器特性ARC
ARC(是编译器特性) ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内 ...
随机推荐
- Dynamics 365 CRM 配置field service mobile
配置field service mobile其实微软是有官方文档的, 但是没有坑的微软产品不是好产品. 一些细节设置文中还是没有考虑到的. 所以这里带大家配置一下field service mobil ...
- python多层数组合成一个数组后循环打印出数组内的每一项元素的方法
a=[1,2,3,4] b=[5,6,7,8] c=[a,b] def test(c): for i in c: return i print(test(c)) 以上代码执行后打印出来的结果是 预期目 ...
- Shoot the Bullet(有源汇带上下界最大流)
有源汇带上下界最大流 在原图基础上连一条汇点到源点流量为inf的边,将有源汇网络流转化为无源汇网络流用相同方法判断是否满流,如果满流再跑一边源点到汇点的最大流就是答案 例题:Shoot the Bul ...
- cesium纽约3dtiles数据下载
cesium示例有纽约的3dtiles数据,下载官方有下载链接,但是下载后为乱码. 因此研究了下,写了个爬虫解码下载,使用办法,安装Python直接运行即可,代码如下: #coding=utf-8 f ...
- 深入了解 Java 中的异常处理 + 面试题
# 深入了解 Java 中的异常处理 + 面试题 在程序开发中,异常处理也是我们经常使用到的模块,只是平常很少去深究异常模块的一些知识点.比如,try-catch 处理要遵循的原则是什么,finall ...
- pyinstaller 还原python代码的方法
pyinstaller 的作用就是将python打包成对应平台的可执行文件.一般这种可执行文件的体积都比较大. 我们可以先通过逆向软件查看一下具体信息 查看字符串信息 只要有诸如以上的字符串 就说明这 ...
- java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(**_jsp.java)tomcat启动异常解决方法
今天遇到的其他一个问题就是,启动tomcat时,报:java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(index_jsp. ...
- VirtualBox 安装ghost版windows XP
昨天尝试在VirtualBox中安装深度技术的GhostXP SP3 V8.02版本的系统,可是安装过程中出现了问题,无法安装,错误提示如下图: 昨天搞了一会,没有结果,今天对于这个无法安装的问题耿耿 ...
- 全卷积网络FCN
全卷积网络FCN fcn是深度学习用于图像分割的鼻祖.后续的很多网络结构都是在此基础上演进而来. 图像分割即像素级别的分类. 语义分割的基本框架: 前端fcn(以及在此基础上的segnet,decon ...
- python中常见的报错信息
python中常见的报错信息 在运行程序时常会遇到报错提示,报错的信息会提示是哪个方向错的,从而帮助你定位问题: 搜集了一些python最重要的内建异常类名: AttributeError:属性错误, ...