竞赛
考级
算法思路详解 1. 问题分析: * 有三种单词组合方式:ac(1a+1c)ac(1a+1c)ac(1a+1c)、aa(2a)aa(2a)aa(2a)、wa(1w+1a)wa(1w+1a)wa(1w+1a) * 目标:最大化单词总数,同时最小化wa单词数量 * 需要合理分配字母到不同组合方式 2. 关键策略: * 枚举法:尝试所有可能的wa单词数量(0到z) * 贪心分配:对于每种wa数量,尽可能多地组合ac,然后用剩余a组合aa * 最优解选择:记录单词数最多且wa最少的方案 3. 变量说明: * i:当前尝试的wa单词数量 * rw:剩余的w数量(未被用于wa的w) * ra:剩余的a数量(未被用于wa的a) * ac:能组成的ac单词数量 * aa:能组成的aa单词数量 * sum:当前方案的总单词数 4. 时间复杂度: * 每组数据的时间复杂度是O(z)O(z)O(z),因为需要遍历0到z的所有可能 * 总时间复杂度是O(T∗z)O(T*z)O(T∗z),对于T≤105T≤10^5T≤105和z≤100z≤100z≤100是可接受的 5. 边界情况处理: * 当a不足时(ra < 0),跳过该情况 * 当所有字母都用完时,计算总单词数 * 当有多个方案单词数相同时,选择wa最少的 6. 为什么这个策略有效: * 通过枚举所有可能的wa数量,确保不会遗漏最优解 * 对于每种wa数量,采用贪心策略最大化ac和aa数量 * 最后选择单词数最多且wa最少的方案 这个算法巧妙地结合了枚举和贪心策略,确保在合理时间内找到最优解。对于字母组合类问题,这种先枚举限制条件再贪心分配的方法很常见。
飞的智动
T4 小午的构造 题目大意 有 a 、c 、w 三个字母若干个,有 ac 、wa 、aa 三种组合,求最多能得到多少组合,并且在得到最多组合的情况下,wa 的个数最少是多少? 解题思路 首先考虑组合出最多数量的单词:由于 c 和 w 只会被用于组成 ac 和 wa ,所有我们优先消耗 c 和 w ,最后剩下的 a 两两组合。 再来考虑如何让 wa 的个数尽量少: * 在消耗 c 和 w 的情况下,我们一定优先消耗 c ,再消耗 w ; * 当 w 被消耗完且 a 两两组合成 aa ,a 还有剩余时,我们可以将 wa 拆开,用其中的 a 去和剩余的 a 组合。 对于上述第二点,我们会发现最终如果有 a 剩余,那么一定只会剩下一个 a ,所有我们最后要拆 wa 时也只会拆一个,那么我们只需要判断组合完 ac 之后的 a 和 w 的奇偶性就可确定是否需要拆 wa 。 参考代码
NoonMaple
贴个毫无思维难度的神秘赛时做法。 注意到 x,y,z≤100x,y,z\le 100x,y,z≤100,所以所有 x,y,zx,y,zx,y,z 的情况不超过 2×1062\times 10^62×106。显然可以记忆化搜索。多测不要清空。 时间复杂度 O(V3)O(V^3)O(V3),其中 V=100V=100V=100。
复仇者_帅童
题意:有三种拆分方式 aa(a+a),wa(w+a),ac(a+c) ok 写上公式tm5分 那我就枚举wa有多少个,正好时间复杂度不会爆 没什么好讲得啦,就上代码(这题我提交了25次)
咕咕咕
T4小午的构造 * 难度:普及- * 思路分析 1. 优先构造ac单词: 首先计算能构造的ac单词数量 ccc ,取 xxx 和 yyy 的最小值 这样能同时消耗 aaa 和 ccc ,保证不浪费 ccc 字母(ccc字母仅能构造ac) 2. 处理剩余字母: 计算构造ac后剩余的 aaa 数量 r=x−cr=x-cr=x−c 计算能构造的 wa 数量 www ,取 zzz 和 rrr 的最小值 调整 www 使得剩余的 aaa 能两两组合成 aa wa尽可能的少 3. 构造aa单词: 剩余 aaa 数量为 r−wr-wr−w ,计算能构造的aa数量a=(r−w)/2a=(r-w)/2a=(r−w)/2 确保所有字母被用完且wa数量最少 * 通过代码 * 时间复杂度分析: 仅有处理 ttt 组测试用例是涉及循环,时间复杂度 O(t)O(t)O(t)。
忘川秋裤