【题解】牛客小白月赛44&大家错的比较多的地方
大家补题的时候如果一直 WA 可以看看你是否踩中了下面的一些坑。
Problem A
条件一必须选“极长”段;条件二是 最大而非 最大;
像 2 1 1
这种数据应当输出 1 1 2 3
而非 2 3
,理由如上。
注意每组数据都需要一次换行,但是单组数据内部不需要换行。
Problem B
萝卜保护伞可以保护自己,虽然出题人认为可能是常识,但或许确实难倒了一些真的没玩过 pvz 的同学。
Problem C
题意:先用 RMB 并用光;再用红点并用光;再用绿点并用光。
直接开 double 模拟的同学可能有少数不优美的写法无法通过本题,昨天找了某位同学的一个朴素写法大家可以参考一下(好像没用另外一位哥哥说的什么奇技淫巧)
double op(int n, double m){ double ans = 0; while (n > 0) { ans += n * 10 + min(1000.0, (n*10*(m-1))); n /= 2; } return ans; }
既然这样我想应该就不必再纠结所谓“卡精度”的问题了。另外还是挺推荐采用官方题解中全程 int 的解法,不需要考虑那个 0.9999 的精度问题。
牛客小白月赛 44 题解
Problem A
由题意最优解区间互不重叠,直接模拟找出所有区间即可。如果不方便存储,可以考虑使用 vector
容器。
Problem B
换参考系:对于每一个植物格子,如果周围 格子都没有保护伞,一定会被偷走。(直接暴力染色可能需要两遍 for 循环较麻烦)
Problem C
通过五折出点可以拿回 投资的 RMB,因此每次对 RMB 数除以二下取整并统计获取的经验即可。
Problem D
根据下方的样例解释,不难发现表格中的规律:
Problem E
由于每个黑点下一步都是白点,最优解直径长度只能是 (黑白交替,两头都是黑)
据此直接统计黑点个数 ,根据求和公式计算 ,注意开 long long
Problem F
参考《电池的寿命》一题,考虑利用其余 条链拼到即将成为重心的点上。
最终解两个不等式,加以分类讨论判断即可:
第一个式子可以考虑 预处理,第二个式子对于一个 批量计算考虑奇偶分讨: