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的更多相关文章

  1. AGC040 Task C. Neither AB Nor BA

    Observations 对一个长为 $2N$ 的序列重复下述操作:取走两个相邻且不同的元素.最后能把序列取空的充要条件是序列中不存在出现超过 $N$ 次的元素. 证明:必要性,取 $N$ 次最多能取 ...

  2. 【做题记录】AtCoder AGC做题记录

    做一下AtCoder的AGC锻炼一下思维吧 目前已做题数: 75 总共题数: 239 每一场比赛后面的字母是做完的题,括号里是写完题解的题 AGC001: ABCDEF (DEF) AGC002: A ...

  3. HPU personal training

    K - Two Contests 原题链接:https://agc040.contest.atcoder.jp/tasks/agc040_b?lang=en 题目大意: 给一个区间集合,将这些区间分为 ...

  4. K - Two Contests

    题目连接:https://atcoder.jp/contests/agc040/tasks/agc040_b 大佬题解:https://blog.csdn.net/duanghaha/article/ ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_4_transient关键字_瞬态关键字

    不想被序列化的成员变量用 transient修饰 age加上static关键字 反序列化age就读取不到正确的值了

  2. prometheus linux系统告警规则 实例

    #prometheus linux系统告警规则 实例 #根据实际情况修改参数 #rules.linux.yml groups: - name: linux rules: - alert: Node-D ...

  3. Altium Designer chapter8总结

    元件库操作中需要注意如下: (1)原理图库:主要分三部分来完成(绘制元件的符号轮廓.放置元件引脚.设计规则检查). (2)多子件原理图库:操作与原理图库基本相同,就是新建part. (3)PCB封装库 ...

  4. JAVA的学习

    怎么说呢,我已经接触JAVA已经两周了,个人感觉还是不懂,哈哈,JAVA是一门编程语言,是大多数开发者较为习惯的编程模式,我感觉相对比C语言来说可能简单学点,可能是我先接触C语言把,或许因人而异把,在 ...

  5. 【译】Redux 还是 Mobx,让我来解决你的困惑!

    原文地址:Redux or MobX: An attempt to dissolve the Confusion 原文作者:rwieruch 我在去年大量的使用了 Redux,但我最近都在使用 Mob ...

  6. java SSM框架 代码生成器 快速开发平台 websocket即时通讯 shiro redis

    A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 , ...

  7. eclipse codeFormatter 和 codeTemplates 模板

    下载  eclipse_modles.rar 好用高效的eclipse的注释和代码风格模板.     版权声明:本文为博主原创文章,未经博主允许不得转载.

  8. Linux系统性能测试工具(一)——内存带宽测试工具mbw

    本文介绍关于Linux系统(适用于centos/ubuntu等)的内存带宽测试工具-mbw.内存性能测试工具包括: 内存带宽测试工具——mbw: 内存压力测试工具——memtester: 内存综合性能 ...

  9. Power Designer将数据库表结构导出到Word

     一.   安装与运行PowerDesigner(本例中用的版本是15.1) 二.“File”→“New Model”→“Categories”→“Information”→“Physical Dat ...

  10. html a标签链接点击闪动问题解决

    <a href="#">链接点击会闪动,解决: 这三种都可以用:<a href="javascript:;"></a>< ...