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语句.你不再需要担心内 ...
随机推荐
- Day8-Python3基础-Socket网络编程
目录: 1.Socket语法及相关 2.SocketServer实现多并发 Socket语法及相关 socket概念 socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道 ...
- Linux 安装Jenkins
1.安装jdk1.8 下载地址:https://github.com/frekele/oracle-java/releases 下载 root@123:~/my_java# wget https:// ...
- Vmware14 开机黑屏或者以独占方式锁定此配置文件失败等问题解决办法
把VMware14版本卸载掉,然后重装一个12版本的 打开之前创建的虚拟机,提示版本不兼容, 打开配置文件: 修改版本为重装的版本,比如12 然后编辑虚拟机设置指定一个系统,比如centos,即可 就 ...
- JDK 原生动态代理是怎么实现的 + 面试题
JDK 原生动态代理是怎么实现的 + 面试题 反射 反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect)的能力.简单来说就是通过反射,可以在运行期间获取.检测和调 ...
- 解决git报错:error: RPC failed; curl 18 transfer closed with outstanding read data remaining 的方法
报错信息: error: RPC failed; curl 18 transfer closed with outstanding read data remainingfatal: the remo ...
- C++基类和派生类的析构函数
1.派生类也不能继承基类的析构函数. 2.与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉. 3.构造函数和虚构函数 ...
- abp vnext2.0核心组件之领域实体组件源码解析
接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备, ...
- Hibernate(五)
================================criteria(QBC)查询========================QBC,(容器)又名对象查询:采用对象的方式(主要是cri ...
- CSS Module解决全局或本地使用@keyframes无效问题
最近使用CSSModule开发react项目,遇到一个问题,使用@keyframes无效,问题如下 /** less + css module **/ :global { .effect-bottom ...
- ROS可视化工具RViz的简单使用教程
1.安装rviz sudo apt-get install ros-melodic-rviz 环境检测.安装 rosdep install rviz rosmake rviz startup(开两个 ...