CF187D BRT Contract
考虑如果哪次经过了红灯则显然已经和出发的时间没关系了。
然后我们需要做的是怎么样找到最近的一个是红灯的点。
然后实际下是我们做一个前缀和:\(L_i = \sum d_i\)
然后求\(\min (L_y - L_i) \mod (g + r) > g\)
然后在值域上动态开点线段树,区间查询\(min\)即可。
倒过来处理一下。
//code by fhq_treap
#include<iostream>
#include<cstdio>
#define ll long long
#define N 100005
int n,g,r;
int mod;
ll d[N],f[N];
struct P{
int L,R;
ll mn;
P(){mn = 1e18;}
}T[N * 60];
int cnt;
#define mid ((l + r) >> 1)
#define ls(x) T[x].L
#define rs(x) T[x].R
int Root;
inline void up(int u){T[u].mn = std::min(T[ls(u)].mn,T[rs(u)].mn);}
inline void change(int &u,int l,int r,int p,int v){
if(!u)u = ++cnt;
// std::cout<<u<<" "<<l<<" "<<r<<" "<<p<<" "<<v<<std::endl;
if(l == r){
T[u].mn = v;
return ;
}
if(p <= mid)
change(ls(u),l,mid,p,v);
else
change(rs(u),mid + 1,r,p,v);
up(u);
}
inline ll query(int u,int l,int r,int tl,int tr){
// std::cout<<u<<" "<<l<<" "<<r<<" "<<tl<<" "<<tr<<std::endl;
if(tl > tr)return 1e18;
if(!u)return 1e18;
if(tl <= l && r <= tr)return T[u].mn;
ll ans = 1e18;
if(tl <= mid)ans = std::min(ans,query(ls(u),l,mid,tl,tr));
if(tr > mid)ans = std::min(ans,query(rs(u),mid + 1,r,tl,tr));
return ans;
}
#define root Root,0,mod - 1
int q;
int main(){
scanf("%d%d%d",&n,&g,&r);
mod = g + r;
for(int i = 1;i <= n + 1;++i)
scanf("%lld",&d[i]),d[i] = d[i - 1] + d[i];
for(int i = n;i;-- i){
int t = mod - d[i] % mod;
ll nex = 1e18;
nex = std::min(nex,query(root,std::max(0,g - t),mod - 1 - t));
if(g - t < 0)
nex = std::min(nex,query(root,g - t + mod,mod - 1));
if(nex != 1e18)
f[i] = d[nex] - d[i] + (mod - (d[nex] - d[i]) % mod) + f[nex];
else
f[i] = d[n + 1] - d[i];
change(root,d[i] % mod,i);
}
scanf("%d",&q);
int las = 0;
while(q -- ){
int t;
scanf("%d",&t);
t = t ^ las;
int tt = t % mod;
ll nex = 1e18;
nex = std::min(nex,query(root,std::max(0,g - tt),mod - 1 - tt));
if(g - tt < 0)
nex = std::min(nex,query(root,g - tt + mod,mod - 1));
// std::cout<<nex<<std::endl;
if(nex == 1e18)
std::cout<<t + d[n + 1]<<std::endl,las = (t + d[n + 1]) % 2147483647;
else
std::cout<<d[nex] + (mod - (d[nex] + t) % mod) + f[nex] + t<<std::endl,las = (d[nex] + (mod - (d[nex] + t) % mod) + f[nex] + t) % 2147483647;
}
}
CF187D BRT Contract的更多相关文章
- CF 187D BRT Contract
传送门 给了60分的nq暴力还是很资磁的!!! 基本上想的跟正解差不多了但是刚T2去了就没想细节QAQ 大概就是我们逆序求一下每一个点从0时刻开始走到终点需要用的时间f 我们需要找到它遇到的第一个红灯 ...
- WCF学习之旅—基于Fault Contract 的异常处理(十八)
WCF学习之旅—WCF中传统的异常处理(十六) WCF学习之旅—基于ServiceDebug的异常处理(十七) 三.基于Fault Contract 的异常处理 第二个示例是通过定制Servic ...
- 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图
[源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...
- java-collections.sort异常Comparison method violates its general contract!
转载:http://www.tuicool.com/articles/MZreyuv 异常信息 java.lang.IllegalArgumentException: Comparison metho ...
- JDK7的Comparison method violates its general contract异常
1.摘要 前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为了TimSort,之后我们又进 ...
- 厦门BRT 硬币型非接触式IC卡分析
前几天去厦门玩顺便多买了一张BRT的票 也就是如图所示的这种硬币型非接触式IC卡 回来之后用Proxmark3分析了卡内数据得到如下16进制dump内容 UID.发卡日期时间. 最近好懒 懒得写了 有 ...
- P6 Enterprise Project Portfolio Contract Management
Find documentation for Primavera products here: Primavera Cloud Services Primavera Prime Primavera P ...
- 重新想象 Windows 8 Store Apps (37) - 契约: Settings Contract
[源码下载] 重新想象 Windows 8 Store Apps (37) - 契约: Settings Contract 作者:webabcd 介绍重新想象 Windows 8 Store Apps ...
- 重新想象 Windows 8 Store Apps (38) - 契约: Search Contract
[源码下载] 重新想象 Windows 8 Store Apps (38) - 契约: Search Contract 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 ...
随机推荐
- git GUI Clients
git GUI Clients Git 自带用于提交 (git-gui) 和浏览 (gitk) 的内置 GUI 工具,但也有一些第三方工具供寻求特定平台体验的用户使用. References Git ...
- 锚点布局anchorlayout在kv中的引用
from kivy.app import App from kivy.uix.anchorlayout import AnchorLayout from kivy.uix.button import ...
- 计算机网络:HTTP
计算机网络基础:HTTP 先验知识 HTTP和其他协议的关系 通过下图,了解IP协议,TCP协议,DNS服务在使用HTTP协议通信过程中各自发挥的作用: 服务器处理流程 接受客户端连接 ------& ...
- OO第四单元UML作业总结暨OO课程总结
目录 目录一.第四单元UML两次作业架构设计第一次作业第二次作业二.架构设计总结与OO方法理解演进三.测试理解与实践演进四.课程收获总结五.课程改进建议六.尾声 一.第四单元UML两次作业架构设计 第 ...
- Shell脚本学习笔记之(自动填充函数模板)
其实,vii 就是写的一个脚本,跟 vi 没半毛钱关系,只不过借用一下这个名字而已.那这个脚本长什么样呢?look: 下面来详细的解析上面的代码,来看第1行: #!/bin/bash 这是Shell脚 ...
- 快速了解XML
1. XML 定义 可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 2. XML 展示 如下是一个xml的标记展示,XML 是不作为的XML 被设 ...
- xUtils3的使用教程
首先在build.gradle下的dependencies下添加引用. implementation 'org.xutils:xutils:3.3.36' 然后创建一个表实体. package com ...
- (转)linux下错误的捕获:errno和strerror的使用,以及perror和strerror的区别
经常在调用linux 系统api 的时候会出现一些错误,比方说使用open() write() creat()之类的函数有些时候会返回-1,也就是调用失败,这个时候往往需要知道失败的原因.这个时候使用 ...
- Python import urllib2 ImportError: No module named 'urllib2'
python3 import urllib2 import urllib2 ImportError: No module named 'urllib2' python3.3里面,用urllib.req ...
- coreseek使用心得
基本使用方法: D:\coreseek-4.1\bin\searchd -c D:\coreseek-4.1\etc\article.conf --stop 停止服务 D:\coreseek-4.1\ ...