Codeforces 1150

1150 C

题意

给你一个由 \(1,2\) 组成的数组,要你重新排列这个数组,使得它的所有是质数的前缀和最长。 \((1\le n\le 200000)\)

Examples

input
5
1 2 1 2 1
output
1 1 1 2 2
input
9
1 1 2 1 1 1 2 1 1
output
1 1 1 2 1 1 1 2 1

一个一个往上去凑就行了,优先选2。

1150 D

题意

给你一个长 \(\le 10^5\) 的文本串,现在你有三个模式串,每个长度 \(\le 250\) ,初始为空,现在你有两种操作:

  • + i c,给串 \(i\) 末尾加上一个字符 \(c\)
  • - i,删除 \(i\) 末尾的字符

现在在每次操作后询问三个串是否分别对应文本串中三个不相交的子序列

Examples

input
6 8
abdabc

  • 1 a
  • 1 d
  • 2 b
  • 2 c
  • 3 a
  • 3 b
  • 1 c
  • 2
    output
    YES
    YES
    YES
    YES
    YES
    YES
    NO
    YES
    input
    6 8
    abbaab
  • 1 a
  • 2 a
  • 3 a
  • 1 b
  • 2 b
  • 3 b
  • 1
  • 2 z
    output
    YES
    YES
    YES
    YES
    YES
    NO
    YES
    NO

    每次询问可以在 \(O(250^2)\) 时间内解决,考虑 \(n^2\) dp。
    我们设 \(nxt[i][c]\) 为字符 \(c\) 在位置 \(i\) 后第一次出现的位置。
    先考虑 \(n^3\) 做法。
    \(dp[i][j][k]\) 表示第一个串匹配到 \(i\) ,第二个串

猜你喜欢

转载自www.cnblogs.com/BlogOfchc1234567890/p/10807485.html