• 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操作的方案数就是一个隔板法。

  • 相关阅读:
    堆、栈、值类型、引用类型分析总结 Part 2
    DataGridView打印
    学习使用ArrayList
    C#与Java之比较
    【原创】串口通信测试程序
    彩色校验码的制作
    C#中使用进度条
    【原创】 Ajax之ModalPopup编程实例
    常用正则表达式
    堆、栈、值类型、引用类型分析总结 Part 1
  • 原文地址:https://www.cnblogs.com/gczdajuruo/p/11809194.html
Copyright © 2020-2023  润新知