AGC040
AGC040
A
模拟。
B
因为顺序无关紧要,所以可以先把区间按右端点排序方便处理。
设第一个区间在\(A\)集合,考虑枚举第一个在\(B\)集合的区间\(i\),这样两个集合的右端点\(\min\)就确定了。再考虑\(i\)后面的区间中左端点最大的那个,假设它在\(A\)集合,那么把\(i\)后面的区间都放进\(A\)集合一定不劣,\(B\)集合同理。也就是说,最优方案一定形如:要么一段前缀在\(A\)集合一段后缀在\(B\)集合,要么\(B\)集合只有一个区间。
C
首先可以黑白染色,偶数位置的\(A\)变成\(B\),\(B\)变成\(A\)。问题变成不能删\(AA\)和\(BB\)。
然后我的想法是考虑删除所有\(C\),要求存在一种删除方案使得剩下的字符串中\(A,B\)个数相等,求合法字符串数,不太会做。然后我就打开了题解,发现我是个sb,其实只要字符串中\(A,B\)的个数分别\(\le \frac{n}{2}\)就行了。
D
对于一种排列,显然满足Ringo从\(p\)开始时Snuke能获胜的\(p\)是一段前缀。
画一条折线,\(x\)是距离,\(y\)是用时。那么将Ringo的折线垂直移动,使得它与Snuke的折线恰好有一个交点时,它与\(x\)轴的交点横坐标就是最大的\(p\)。
枚举\((p,0)\)处对应的是哪一条线段,设为\(k\)。考虑这么一条折线\(C\):
从\((p,0)\)出发,沿着Ringo的折线走到两条折线的交点处,再沿着Snuke的折线走到\((n,s)\),其中\(s=\sum a_i\)。
容易发现每一种方案一定可以找出这么一条折线,且这么一条折线(从某个\((x,0)\)开始,先以斜率\(b_i\)向右上走,在某个点后变为以斜率\(a_i\)向右上走,走到\((n,s)\))能对应一种方案。\(p\)要尽量大,也就是说\(C\)要包含尽量少的线段,所以\(C\)上升的越快越好。
考虑一条放在\(k\)右边的线段\(i\)。\(i\)最多使\(C\)上升\(\max(a_i,b_i)\),而这个上界是可以达到的,只要把\(a_i < b_i\)的放在两折线交点前面,其他的放在交点后面即可。那么找出除\(k\)外\(\max(a_i,b_i)\)最大的若干个线段,假设有\(q\)个,要求\(b_k\)加这些线段的\(\max(a_i,b_i)\)之和\(\ge s\),且\(q\)尽量小。那么对于这个\(k\),\(C\)中包含线段数的整数部分就是\(q\),小数部分特殊计算一下即可。
E
先考虑简化版本,如果只有1操作怎么做?显然答案是\(a_i > a_{i+1}\)的个数。
再考虑原问题,考虑最终序列是怎样形成的。可以发现每一个位置的数都是若干次1操作和若干次2操作加出来的。那么每一个\(A\)可以拆成\(x+y\),\(x\)表示1操作对这个位置的贡献,\(y\)同理。那么问题就变成了,要决定序列\(x,y\),满足\(x_i+y_i=A_i\),\(x_i > x_{i+1}\)有\(1\)的代价,\(y_i < y_{i+1}\)有1的代价,求代价最小值。
朴素的想法就是DP,\(f_{i,j}\)表示前\(i\)个数,\(x_i=j\)的最小代价。然后我又sb了,打开题解,显然\(f_{i,0} \le f_{i,A_i}+2\),维护转折点就行了。
F
可以规定两点距离\(\ge 2\)时才能对较左边的点用\(1\)操作,就变成了操作序列计数。
记\((x,d)\)表示较右边的点在\(x\)处,两点距离为\(d\)。那么操作有三种:
1.\(++x,++d\)。
2.当\(d \ge 2\)时,\(--d\)。
3.设置\(d=0\)。
1操作一定执行\(b\)次,考虑枚举2操作的次数\(k\)。注意到一个合法的操作序列(合法定义为每次执行2操作时\(d \ge 2\))删掉所有3操作后一定也合法,那么可以考虑先排列所有\(1,2\)操作,再往里面插入\(n-b-k\)个\(3\)操作。考虑\(3\)操作插在哪些位置可以使序列合法且最终两点分别在\(a,b\)处。有几点限制(以下\(d'\)指忽略所有3操作得到的\(d\)):
1.结束后\(d=b-a\)。这说明最后一次3操作之前一定满足\(d'=a-k\)。
2.任意时刻\(d \ge 2\)。这说明如果要在某个\(d'=k\)的位置后面插入一个\(3\)操作,那么这个位置后面不能出现\(d' \le k\)的位置。
也就是说,可以在最后一次\(d'=0,1,2,\dots,a-k\)的每个位置后面插入任意多个3操作,要求\(d'=a-k\)后面至少插入一个3操作。注意到这与1,2操作具体是怎样排列的无关,所以排列1,2操作和插入3操作是独立的。排列1,2操作的方案数就是一个基础的格路问题,插入3操作的方案数就是一个隔板法。
AGC040的更多相关文章
- AGC040 Task C. Neither AB Nor BA
Observations 对一个长为 $2N$ 的序列重复下述操作:取走两个相邻且不同的元素.最后能把序列取空的充要条件是序列中不存在出现超过 $N$ 次的元素. 证明:必要性,取 $N$ 次最多能取 ...
- 【做题记录】AtCoder AGC做题记录
做一下AtCoder的AGC锻炼一下思维吧 目前已做题数: 75 总共题数: 239 每一场比赛后面的字母是做完的题,括号里是写完题解的题 AGC001: ABCDEF (DEF) AGC002: A ...
- HPU personal training
K - Two Contests 原题链接:https://agc040.contest.atcoder.jp/tasks/agc040_b?lang=en 题目大意: 给一个区间集合,将这些区间分为 ...
- K - Two Contests
题目连接:https://atcoder.jp/contests/agc040/tasks/agc040_b 大佬题解:https://blog.csdn.net/duanghaha/article/ ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_1_线程安全问题的概述
- 练习2:python-把excel表格中某张表的内容导入sqlite
前言:最新需要用到大批量的数据,在excel造好数据之后,存储在数据库库中,方便调用数据,于是就想着用python语言写一下这个过程 python有个openpyxl的模块,可以直接用来对于excel ...
- pandas入门(1)
import pandas as pd import numpy as np # 自动创建索引 obj = pd.Series([4, 7, -5, 2]) print(obj, type(obj)) ...
- oracle--表分区、分区索引
--|/ range分区 create table sale( product_id varchar2(5), sale_count number(10,2) ) partition by range ...
- 实现atoi
1. 去掉首位空格 2. 判断首位是否有正负号 3. 判断各位是否是0~9,有其他字符直接返回当前结果 public class Solution { public int atoi(String ...
- [Web 前端] 016 css 元素的转换
三种元素之间的转换 display 属性是用来设置元素的类型及隐藏的 常用的属性有 none 元素隐藏且不占位置 block 元素以块元素显示 inline 元素以内联元素显示 inline-bloc ...
- 通过document.domain实现跨域访问
通过document.domain实现跨域访问:https://blog.csdn.net/nlznlz/article/details/79506655 前端跨域方法之document.domain ...
- AcWing 831. KMP字符串(模板)
给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...
- Excel VBA批量处理寸照名字
需求:因为处理学生学籍照片,从照相馆拿回来的寸照是按班级整理好,文件名是相机编号的文件.那么处理的话,是这么一个思路,通过Excel表格打印出各班A4照片列表,让学生自行填上照片对应姓名.表格收回来后 ...
- 题解 P5265 【模板】多项式反三角函数
→_→ OI 生涯晚期才开始刷板子题的咱 其实这题就是道公式题,搞过多项式全家桶的同学贴贴板子照着公式码两下都能过... 至于公式的证明嘛...总之贴上公式: \[Arcsin(F)=\int{F'\ ...