Agc011_F Train Service Planning
接着就是%%%、$orz、Oro、Or2、Otz、OTL、sto、rzo、Jto$、On_、○| ̄|_啊
模拟赛里直接把这道题刚掉了
一题升天·爆踩全场
这题思维跨越度已经超越了我的想象,读题都要好一会才读明白,没有任何代码难点,甚至没有多少细节,但就是对思维能力的考验特别深,我也不写题解了,就简单说说大体思路好了。
·把题目中这一抽象的限制代数化。
·在模意义下推导式子,将问题转化。
·利用线段树优化$DP$解决
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define M 200020
#define mid ((l+r)>>1)
using namespace std;
LL read(){
LL nm=0,fh=1; char cw=getchar();
for(;!isdigit(cw);cw=getchar()) if(cw=='-') fh=-fh;
for(;isdigit(cw);cw=getchar()) nm=nm*10+(cw-'0');
return nm*fh;
}
LL n,m,K,D[M],B[M],ans,now,L[M],R[M],S[M],T[M<<2],p[M<<2],F[M];
void pushdown(LL x){if(p[x]) p[x<<1]=p[x],p[x<<1|1]=p[x],p[x]=0;}
LL query(LL x,LL l,LL r,LL pos){
if(l==r) return p[x]; pushdown(x);
if(pos<=mid) return query(x<<1,l,mid,pos);
else return query(x<<1|1,mid+1,r,pos);
}
void mdf(LL x,LL l,LL r,LL opl,LL opr,LL kd){
if(r<opl||opr<l||opr<opl) return;
if(opl<=l&&r<=opr){p[x]=kd;return;}
pushdown(x),mdf(x<<1,l,mid,opl,opr,kd);
mdf(x<<1|1,mid+1,r,opl,opr,kd);
}
int main(){
n=read(),K=read();
for(LL i=1;i<=n;i++) D[i]=read(),B[i]=read(),S[i]=S[i-1]+D[i];
for(LL i=1;i<=n;i++) if(B[i]==1&&K<(D[i]<<1)){puts("-1");return 0;}
for(LL i=1;i<=n;i++){
if(B[i]&1) L[i]=(-(S[i-1]<<1)%K+K)%K,R[i]=(-(S[i]<<1)%K+K)%K;
else L[i]=0,R[i]=K-1; T[++m]=L[i],T[++m]=R[i];
}
sort(T+1,T+m+1),m=unique(T+1,T+m+1)-T-1;
for(LL i=n;i>0;i--){
L[i]=lower_bound(T+1,T+m+1,L[i])-T;
R[i]=lower_bound(T+1,T+m+1,R[i])-T;
LL tag=query(1,1,m,L[i]);
if(tag) F[i]=F[tag]+((T[L[tag]]-T[L[i]])%K+K)%K;
if(L[i]<=R[i]) mdf(1,1,m,1,L[i]-1,i),mdf(1,1,m,R[i]+1,m,i);
else if(R[i]+1<L[i]) mdf(1,1,m,R[i]+1,L[i]-1,i);
} ans=F[1];
for(LL i=1;i<=m;i++){
LL now=query(1,1,m,i); if(!now){ans=0;break;}
ans=min(ans,F[now]+(((T[L[now]]-T[i])%K+K)%K));
}
printf("%lld\n",ans+(S[n]<<1));
}
Agc011_F Train Service Planning的更多相关文章
- [Agc011F] Train Service Planning
[Agc011F] Train Service Planning 题目大意: 有n+1个车站,n条轨道,第i条轨道联通i-1和i车站,通过它要花a[i]时间,这条轨道有b[i]=1或2条车道,也就是说 ...
- AtCoder Grand Contest 011 F - Train Service Planning
题目传送门:https://agc011.contest.atcoder.jp/tasks/agc011_f 题目大意: 现有一条铁路,铁路分为\(1\sim n\)个区间和\(0\sim n\)个站 ...
- 【Atcoder Grand Contest 011 F】Train Service Planning
题意:给\(n+1\)个站\(0,\dots,n\),连续的两站\(i-1\)和\(i\)之间有一个距离\(A_i\),其是单行(\(B_i=1\))或双行(\(B_i=2\)),单行线不能同时有两辆 ...
- 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)
洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...
- [AGC011F] Train Service Planning [线段树优化dp+思维]
思路 模意义 这题真tm有意思 我上下楼梯了半天做出来的qwq 首先,考虑到每K分钟有一辆车,那么可以把所有的操作都放到模$K$意义下进行 这时,我们只需要考虑两边的两辆车就好了. 定义一些称呼: 上 ...
- [agc011F]Train Service Planning-[线段树优化dp+神秘思考题]
Description 传送门 Solution 请围观lhx大佬的博客(大佬写的太好了我都没有写的动力了em) Code #include<iostream> #include<c ...
- AtCoder Grand Contest 011
AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...
- NOIp2018模拟赛三十七
奇怪的一场... 前两题都是全场题,C题明显不可做,我题目都没看懂...(STO lhx OTZ) 成绩:100+100+8=208 貌似十几个208的...A题暴力$O(nmc)$能过...暴力容斥 ...
- A*G/C011
A*G/C011 A Airport Bus 不会zbl/kk B Colorful Creatures 枚举每个开始的点直接倍增 我好像sb了,可行的是一段前缀所以可以直接2分 C Squared ...
随机推荐
- Mysql 行数据转换为列数据
现有如下表: 需要统计手机所有售卖价格,显示为如下表: 需要使用group_concat对price进行处理,并且去重重复价格 sql如下: select type,group_concat(DIST ...
- 【BZOJ3060】[Poi2012]Tour de Byteotia 并查集
[BZOJ3060][Poi2012]Tour de Byteotia Description 给定一个n个点m条边的无向图,问最少删掉多少条边能使得编号小于等于k的点都不在环上. Input ...
- 九度OJ 1355:扑克牌顺子 (模拟)
时间限制:2 秒 内存限制:32 兆 特殊判题:否 提交:1676 解决:484 题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^). ...
- Arrays数组工具类中存在的坑!
以下是一个坑: 看到使用asList时候,可以返回一个集合,当然集合拥有CRUD的特性: 代码中使用 了add和remove时候均报错:Exception in thread "main&q ...
- elasticsearch从入门到出门-04-入门的几个需求练手
第一个分析需求:计算每个tag下的商品数量 GET /ecommerce/product/_search{ "aggs": { "group_by_tags&qu ...
- EventLoop(netty源码死磕4)
精进篇:netty源码 死磕4-EventLoop的鬼斧神工 目录 1. EventLoop的鬼斧神工 2. 初识 EventLoop 3. Reactor模式回顾 3.1. Reactor模式的组 ...
- Android系统移植与调试之------->如何修改Android默认字体大小和设置里面字体大小比例
因为我修改 ro.sf.lcd_density的值,将它从160修改 为120,所以导致整个系统的字体都变得很小.因此需要将整个字体变大,并且在设置-->显示-->字体大小的4个选项的值都 ...
- 聊聊数据库~6.SQL运维中篇
上篇回顾:https://www.cnblogs.com/dotnetcrazy/p/10810798.html#top 1.6.5.MySQL日志相关 本文的测试环境:MySQL5.7.26.Mar ...
- 了解CentOS服务器的基本信息
简单描述了如何从CPU.内存.硬盘性能.负载方面去了解自己工作的服务器性能.这个很重要,必须了解机器的方方面面才能提高在自己运维工作效率. 一.查看linux服务器cpu详情 查看物理cpu个数: [ ...
- 计算机网络协议层次(转发:http://blog.csdn.net/gavin_john/article/details/53186570)
计算机网络学习的核心内容就是网络协议的学习.网络协议是为计算机网络中进行数据交换而建立的规则.标准或者说是约定的集合.计算机网络协议同我们的语言一样,多种多样. 为了给网络协议的设计提供一个结构,网络 ...