2021.01.14【NOIP提高B组】总结

TOP

        • T1 Candy
        • T2 嘟嘟噜
        • T3 天才绅士少女助手克里斯蒂娜
        • T4 凤凰院凶真
        • 完成情况
        • 更新=v=

这是一个好东西->作者主页

T1 Candy

题目大意:给你三个数,每回合可以把三个数分别均分给另两个数。如果任意一个是奇数则结束。求循环次数,如果死循环则输出-1。
考试时:不开 l o n g l o n g longlong longlong见祖宗……
思路:

  • 当三个数相等时,死循环,输出-1
  • 否则暴力模拟,保证答案不超过 100 100 100(本人亲测)

T2 嘟嘟噜

题目大意:详见约瑟夫问题
思路:

  1. 暴力 0 0 0
  2. 推公式, f i = ( f i − 1 + m ) f_{i}=(f_{i-1}+m) fi=(fi1+m)% i i i f 1 = 0 f_1=0 f1=0
  3. 因为每次加 m m m不一定被取模成功,所以考虑一次性加很多次,题目变成数学+追及问题

T3 天才绅士少女助手克里斯蒂娜

给你 n n n个电子,定义一个飙升系数,每次可以有两种操作:

  1. a a a电子修改为{ x , y x,y x,y}
  2. l l l~ r r r间的飙升系数

思路:首先拆公式,然后用树状数组或线段树维护

T4 凤凰院凶真

题目大意:让你求两个序列的最长公共上升子序列。
思路:

  1. 搜索, 20 20 20
  2. 搜索+记忆化,设 f i , j f_{i,j} fi,j表示第一个序列选到 i i i,第二个序列选到 j j j,且 j j j一定选的最长长度。 45 45 45
  3. 把记忆化抠出来单独做 d p dp dp,维护 m a x ( f k , i − 1 ) , k < j max(f_{k,i-1}),kmax(fk,i1),k<j,然后更新即可。 100 100 100

完成情况

  • T1
  • T2
  • T3
  • T4

更新=v=

T3
注意事项:线段树常数大,有可能时间超限,推荐用树状数组;
树状数组维护需要注意几个点:

  • 树状数组更改用差值更改
  • 当进行取模时,有可能减出负数,需要加上一个模数
  • 举个栗子: f − g > f f-g>f fg>f% m o d − g mod-g modg,注意这种情况
  • 快读会不会读了很多乱东西
  • 快输要判 0 0 0

T4
思路(详):
f i , j f_{i,j} fi,j为上面选到第 i i i个数,下面选到第 j j j个数,且 b j b_j bj必选的最长序列。
同时定义 p r e i , j pre_{i,j} prei,j表示对应上面的 f f f数组的前驱。
a i = b j a_i=b_j ai=bj时, f i , j = 1 + m a x k < j , b k < a i ( f i − 1 , k ) f_{i,j}=1+max_{kfi,j=1+maxk<j,bk<ai(fi1,k)
因为 j j j从小到大枚举,则可以边做边更新 k k k值,同时记录最大值的 i ′ i' i j ′ j' j
即便不能更新,也要 f i , j = f i − 1 , j , p r e i , j = p r e i − 1 , j f_{i,j}=f_{i-1,j},pre_{i,j}=pre_{i-1,j} fi,j=fi1,j,prei,j=prei1,j
最后在所有数组中找最大值并倒序输出路径即可。

你可能感兴趣的:(考试)