Moscow Subregional of NEERC, ACM ICPC 2016-2017 解题报告

挖坑
已过ABEFGHL

A

  • 这种题下意识就想找个数据结构维护,那要怎么维护呢?就想了想排个序后能不能维护下标之类的,发现最大的那个数当狗啊,想找谁找谁,于是签到。

B

  • 这种题下意识就想找找规律,结果找不到。
  • 所以先讨论一下,

    • 当w大于r,有每次写都能读,所以会剩下一点点,会剩下多少呢?(w-r),此时发现问题,当(w-r)不断积累,最接近爆发的时候加上一个w听起来不错,令g=gcd(w,r),则该值为(r/g-1)*(w-r)+w,好像不错。
    • 当w小于r,要写多几次才能读,那什么时候大呢?每被读一次会剩下一点点,不断积累,最接近爆发的时候会比较大。这个东西怎么求?若求gcd,则r/g,w/g后剩余的值,做这种读写操作时余数是可以循环全部的0~w-1的,那么有该最大值为(r/g-1)*g+w,这样感觉思路对了,再回过头看看w>r,发现问题了吗?
    • w-r不断积累并接近爆发时,余数的循环还没有到尽头,什么时候到尽头?和w小于r一样,所以,其实式子都是(r/g-1)*g+w。
  • 其实这题本来还应该有个经典问题,就是爆longlong的问题,其实数据没有爆,但在做题的时候我因为很晚才发现w大于r那里的式子有误,因此一直在玩这个爆longlong的东西。

C

  • 还没做

D

  • 还没做

E

  • 比较苦难的题目。
  • 题目的转换方式总共有1-5,1#5,2%6,1,这四种表达方式,这是一种看起来显然的dp转移关系。
  • 首先想到的是形如f[i][j]的dp模式,表示前i个数中,第i个数状态为j的最优选择方式,显然转移需要f[i-1][j]和f[i-2][j],此时会有一个问题,如果f[i][j]=f[i-2][k]+…..;在这种转移下,a[i-1]的状态是被忽略的,这显然是不行的,因为每个数都要参与到缩写中来,因此,我们只能以形如f[i]=f[i-1]+=f[i-2]+….这种形式进行转移。
  • 为了在f[i]=f[i-1]+…的转移中加入a[i]=a[i-2]+2的状态,我们将方程改写为f[i][j][k]表示前i个数中,i-1的状态为j,i的状态为k的最优串。
    • 更为具体的,状态有5种:
    • 0,表示自立状态——“14,”
    • 3,表示连续状态的开始——“14-”
    • 4,表示奇偶连续的开始——“14%”,“13#”
    • 1,表示连续状态的结束——“18,”
    • 2,表示奇偶连续的结束——“18,”,“17,”
    • (其实如果在初始状态时把3列为”14-14”,那么1状态就可以略去了;类似的,2状态是否也可以略去呢?读者可以考虑写这种更优的DP方式,不过这种做法在输出方案时要稍微麻烦)
  • 在状态间存在复杂而显然的关系,在这里就不展开,根据这些关系,我们构造一个bool表表示状态间是否可以转移,p[5][5]=
    {{1,0,1,1,1}
    ,{1,1,0,1,1}
    ,{1,0,1,1,1}
    ,{0,1,0,0,0}
    ,{1,0,1,0,1}};
  • 对于非条件转移的f[i][j][k],就可以直接利用该表转移。
  • 对于条件转移的f[i][j][k],有:
    • a[i]==a[i-1]+1,应用范围为k==1
    • a[i]==a[i-1]+2,应用范围为j!=0&&k==2
    • a[i]==a[i-2]+2,考虑f[i][j][k]==f[i-1][2][j] ||f[i][j][k]==f[i-1][4][j]的状态。
  • 对于状态f[i][j][k]=f[i-1][m][n],我们有j=n,因此只需要记录p[i][j][k]=m,就可以保存状态的路径。
  • DP后回推即可求出答案串。

F

  • 简单的贪心,或者简单的DP
    贪心:显然,先把所有区间找出来,该缩的缩,该删的删,再处理下边界。
    DP:显然,维护一个串长度g[i],顺便维护一下最小字典串f[i],推的时候往前枚举下断点就好了。
    %%神坑,一晚上都在对拍。

G

  • 签到级别的构造。想清楚再写就好了,要往有空位的披萨上挪。

H

  • 按题意模拟,细节较多的模拟。写模拟一定要仔细读题。流程最好能列一列再开题,不要急着码,结构一乱这种题太容易卡死。

I

  • 还没做

J

  • 还没做

K

  • 还没做

L

  • 倒序维护一个概率乘到达时间的东西,遇到要出队的就减去他的到达时间就好了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值