Welcome to Liukejie's |

liukejie

园龄:1年8个月粉丝:5关注:11

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×3××(n1) 种方法。
    绑一块的点能组成的树,有 (n2)n22 种。
    点与点之间相互连接,有 4n21 种。
    将方案乘起来即可。
  • 代码

T4 合并石子

  • 题意:给定一个由正整数组成的序列 a1,a2,,an,你可以进行若干次操作,每次操作你可以选择一个位置 i2in1),如果满足 ai=ai1+ai+12,则可以删除 ai。删除后,后面的数字依次前移,序列长度减少 1。问经过若干次操作后,序列的最小长度是多少?

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

  • 代码

T5 数线 不会

T6 记忆 不会

posted @   liukejie  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起