NOIP20240731

NOIP20240731

T1 数据库

  • 题意:给定一个字符串 S 作为用户名,检查它是否已存在于数据库(集合)中。如果 S 不存在,则返回 OK 并将 S 加入数据库。如果 S 已存在,则在 S 后面添加最小的正整数,然后加入数据库,并返回该新用户名。
  • 题解:简单的 map 练习题。
  • 代码

T2 社会服务

  • 题意:有两边各 \(n\) 个潘奕帆要过马路并返回原地,搀扶一个潘奕帆过马路和你单独穿越马路的时间为 \(t\),潘奕帆休息的时间为 \(x\)。你一次只能扶一个潘奕帆,问所有潘奕帆过马路并返回的最短时间。
  • 题解:首先扶潘奕帆过第一波马路的时间是 \(2nt\),接下来考虑你留在哪边扶第二波马路。留在这边的开始时间是 \(\min(2nt,2t+x)\),去那边的开始时间是 \(\min(2nt+t,t+x)\),考虑最小的第二波时间即可,第二波时间开始之后可以连续扶过马路。
  • 代码

T3 完美匹配

  • 题意:自己看
  • 题解:\(n\) 为奇数答案为 \(0\)
    把两个点绑一块,共有 \(n!!=1\times 3\times \dots \times (n-1)\) 种方法。
    绑一块的点能组成的树,有 \((\cfrac{n}{2})^{\cfrac{n}{2}-2}\) 种。
    点与点之间相互连接,有 \(4^{\cfrac{n}{2}-1}\) 种。
    将方案乘起来即可。
  • 代码

T4 合并石子

  • 题意:给定一个由正整数组成的序列 \(a_1, a_2, \dots, a_n\),你可以进行若干次操作,每次操作你可以选择一个位置 \(i\)\(2 \leq i \leq n-1\)),如果满足 \(a_i = \cfrac{a_{i-1} + a_{i+1}}{2}\),则可以删除 \(a_i\)。删除后,后面的数字依次前移,序列长度减少 \(1\)。问经过若干次操作后,序列的最小长度是多少?

  • 题解:差分之后,变成每次选择两个相邻的相同的值 \(a_x,a_y\),把他们合并成 \(a_x+a_y\)
    注意到 \(a_i\div \text{lowbit}(a_i)\) 不同的数一定不能合并,按这个东西分段,分段之后考虑怎样合并。
    对于每一个点 \(i\),设 \(f_{i,j}\) 表示以 \(i\) 为右端点合并到 \(\text{lowbit}\)\(2^j\)的左端点需要是多少,这个可以倍增预处理出来。
    剩下的对于每一段做 dp,设 \(G_i\) 为最小长度,则对于每一个 \(j\) 都有 \(G_i=min(G_i,G_{f_{i,j}}+1)\)

  • 代码

T5 数线 不会

T6 记忆 不会

posted @ 2024-08-26 10:03  liukejie  阅读(6)  评论(0编辑  收藏  举报