挂分 100pts。
T1:数组不清空导致的。
题意: 个物品,第 个物品花费 ,价值 。问获得 的价值最少花多少钱。。
二分,求 块能买到多少价值。按花费从小到大枚举 ,维护一个 "当前物品集合" ,初始只存储 的物品。
若 二进制第 位是 ,从 中取最大价值的物品买了。
然后把 中剩下物品按价值从大到小排序,最大和第二大、第三大和第四大、…… 两两配对,价值相加,作为花费 的物品保存。同时若多出一个物品单独了,也将它单独视作一个 的物品放在 里。
T2:
题意:给定 的 01 方格。判断每个格子,是否存在两个 ,到它的曼哈顿距离相等。
观察:两个格子的曼哈顿距离取值为 ,所以若 个数 ,由抽屉原理知每个格子都能找到两个 的距离相等。
因此只剩下 个 了,采用枚举每一对 然后打标记的方式。
若两个 曼哈顿距离是奇数,跳过。否则开始大分讨。
-
同行,则中间那一列都可以。
-
同列,则中间那一行都可以。
-
同对角线,则考虑它们构成的正方形的另外一条对角线。这条对角线也是可以的。另外,这条对角线的端点对应的子矩阵也是可以的(例如这条对角线是左上-右下,那么以它左上端点为右下端点的子矩阵也是可以的)。
-
啥也不是。找到它们构成的矩形的中心 ,从 画一条与两个 不同方向的 ° 对角线,这条对角线是可以的。如果这条对角线触碰到矩形上下边界,则从对角线端点向上/下是可以的;否则,从对角线端点向左/右是可以的。
维护二维前缀和,和两个对角线的前缀和。
T3:
题意:给定 01 串 ,问有多少个 ,使得 包含 是子序列,且以某种方式删去 后,预留的是 。。答案取模。数据随机生成。
怎么分类,使得不重不漏,是难点。
表示 填了前 个字符。若 的第 位是 ,表示可以把这 个字符分配,使得匹配好 和 。这是一个不重不漏的分类。
转移到 。考虑填 还是 ,再根据 下一位是否对上了,就能求 。实际上甚至可以位运算优化这个到 。
但是状态定义是 的。怎么办?
数据随机提示我们:有效状态非常少。经过代码,非 状态个数下一般不超过 ,还要再少得多。因此直接用队列来转移状态即可。
T4:
题意:给定 。三个变量 初始为 。每次操作可以选一个变量 ,也可以三个变量一起 。问有多少种长度 的操作序列,使得最终 。。取模。
非常巧妙的题。
我们发现,如果用四种操作:、、、,就可以拼凑出所有可能的八种操作()。把它们按顺序记作 类操作。
例如: 可以转化为 , 可以转化为 。于是我们只需要考虑这四种操作。默认转译时每个操作内部按字典序排序。
原问题的操作序列,可以等价为新问题的操作序列,而且显然是一一对应的。因此只需要计数有多少种合法的新操作序列了。
注意到 操作一定出现 次,因为任何一个原操作转译为新操作时, 都会出现。把 看作一个操作的休止符。
设 操作各出现 次。注意因为每个原操作不会有相同的新操作,所以 。
原来要求 ,等价于 、、。
先把 个 排成一排,每个 前面都是一个可以插入 的 "待插入空间"。因为默认按字典序排序,所以 之间不是排列是组合。因此当 确定的时候,方案数是 。
法一:枚举 ,判断是否合法,然后求和。复杂度 。
法二:枚举 ,先判断它们两个是否合法,以及是否存在合法的 。如果存在, 是固定的。预处理 表示 中 的数的组合数求和即可。复杂度 。
法三:根据 可以算出 的余数,根据 的余数可以算出是否存在 合法。所以只枚举 ,判断后面推出来的所有是否合法。然后算出 的余数,直接枚举 为这个同余类内的所有数, 的答案由上面预处理的东西计算。因为合法的 很少,所以跑的依然很快。
法四:前面和法三一样,用上面预处理的东西算即可做到复杂度严格 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!