挖坑
已过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
- 倒序维护一个概率乘到达时间的东西,遇到要出队的就减去他的到达时间就好了。