CodeChef Starters 123 记录
好困zzz
Algomaniac Finals
输入 \(N\),检查 \(N\) 是否为 \(17\)。
wow python 3
print("YAY" if input()=="17" else "NO")
Room Allocation
因为每个房间内只能有同一个大学的成员,所以对于大学 \(i\) ,需要的房间数为 \(\left\lceil\dfrac{A_{i}}{2}\right\rceil\)。可得答案为 \(\begin{aligned}\sum_{i=0}^{N}{\left\lceil\dfrac{A_{i}}{2}\right\rceil}\end{aligned}\)。
Maximise Adjacent Sum
推一推式子
\(\begin{aligned} f(A) &= \sum_{i=1}^{N-1}{(A_{i}+A_{i+1})}\\ &= \sum_{i=1}^{N-1}{A_{i}}+\sum_{i=1}^{N-1}{A_{i+1}}\\ &= \sum_{i=1}^{N-1}{A_{i}}+\sum_{i=2}^{N}{A_{i}}\\ &= \sum_{i=1}^{N}{A_{i}}-A_{N}+\sum_{i=1}^{N}{A_{i}}+A_{1}\\ &= 2\left(\sum_{i=1}^{N}{A_{i}}\right)-(A_{1}+A_{N}) \end{aligned}\)
此时当 \(A_{1}+A_{N}\) 最小,\(f(A)\) 最大。所以我们取 \(A_{1}\), \(A_{N}\) 为数组 \(A\) 里最小的两个值,便可得答案。
Check Adjacent Sum
用回上一题的思路。如果存在排列满足 \(f(A)=2\left(\sum\limits_{i=1}^{N}{A_{i}}\right)-x\),那么必定存在 \(i\), \(j\) 满足 \(A_{i}+A_{j}=x\)。
只需在输入询问前用 map 记录所有 \(A_{i}+A_{j}\)(\(i \neq j\))的出现次数,然后对每次的查询 \(X\) 检查 \(X\) 是否在 map 里的值不为 \(0\)即可。
总时间复杂度:\(O(N^2+QN)\)
\(Q \le 50\),\(N \le 50\),可以通过。
Minimum And Maximum I
打表题
Minimum And Maximum II
打表题2
因为都是打表过的所以不给出证明qwq
Yet Another Alice Bob Game
以前玩过这个游戏www
当 \(A>B\),不管 Bob 怎么玩都会输。
- 如果 \(N \le A\),Alice 会在第一轮赢下游戏。
- 如果 \(N>A\),Alice 只需每一轮都拿一块石子,直到石子数量 \(\le A\)。Bob 不可能在这之前获胜,考虑两种情况
- Alice 拿了一块石子后,石子数量 \(=A\)。此时 Bob 能取出的石子数量最大为 \(B\),可是 \(B<A\),所以 Bob 无法获胜。
- Bob 拿了 \([1,B]\) 块石子使得石子数量 \(\le A\)。此时 Alice 只需拿完剩下的石头便可获胜。
当 \(A<B\),和上面相反,Alice 会输掉游戏。除了当 \(N \le A\) 时,Alice 可以在第一轮获胜。
当 \(A=B\),就变成了 ”抢21“ 游戏 (Counting to 21)。下面 ”拿“ 指的是那一轮所拿的最后一块石子。
- 如果你想拿石子 \(1\)(石子数量 \([1,A]\))
- 就要让对手拿到石子 \([2,A+1]\)(石子数量 \(A+1\))
- 那你需要拿石子 \(A+2\)(石子数量 \([A+2,2A+1]\))
- 就要对手要拿到石子 \([A+3,2A+2]\)(石子数量 \(2A+2\))
- 那你需要拿石子 \(2A+3\)(石子数量 \([2A+3,3A+2]\))\(\\\vdots\)
以此类推。
所以当 \(N \not\equiv 0 \pmod{A+1}\),Alice 总有办法在第一轮把下一轮的石子数量变为 \(k(A+1)\),赢下游戏。相反当 \(N \equiv 0 \pmod{A+1}\),Bob 获胜。
赛时就做到这题qwq
如果之后有补题会更 ₍ᐢ> ̫<ᐢ₎
话说 URL 3mog1sum www

浙公网安备 33010602011771号