2.22 比赛
2.22 比赛
也就是说,输出个 No,输出个 \(n-1\),分就比我四个半小时高了,哈哈!
difficulty:2748,2871,3272
A
Subtask 1 (30pts)
考虑状态压缩动态规划,dp[S][ans] 表示当状态为 S 时,目前答案为 ans 时的方案个数。
我们发现每一次概率 \(\div n\),都一定会多一个 X。所以概率即为 \(\frac{1}{n^{点的个数}}\)。
转移是容易的,我们发现 dp[S][ans] 可以对所有 \(s_i=X\) 的位做转移,代价为 最接近的点到 \(i\) 的距离。
时间复杂度 \(O(2^n\times n)\)。理论复杂度低但是实现起来有难度,(不知道是否可以避免)但反正常数比较大。
Subtask 2 (65pts)
出题人你好会造数据呀qwq。
输出 No 即可获得 50pts。综合 Subtask 1 可以获得 65pts
upd:原来是 spj 只检查了第一组问询。那出题人你好会写 spj 呀qwq。
Subtask 3(100pts)
解法显然是 dp。考虑怎么 dp。
设 \(P_{l,r}\) 表示将 \([l,r]\) 区间全部改为 X 的方案数。
设 \(f_{l,r}\) 表示将 \([l,r]\) 区间全部改为 X 的 \(ans\) 之和。
答案:枚举最后一次的操作,设最后一次把第 \(k\) 个位置从 . 变成 X ,答案为
设 \(c(l,r)\) 为原序列中 \([l,r]\) . 的数量。
枚举上一次从 . 变成 X 的位置 \(k\),
前 \(c(l,r-1)-1\) 次,必须:
-
有 \(a=c(l,k)-1\) 次随机到 \([l,\cdots,k]\) 中,每次概率为 \(\frac{k-l+1}{r-l+1}\)。
-
有 \(b=c(k+1,r-1)\) 次随机到 \([k+1,\cdots,r-1]\) 中,每次概率为 \(\frac{r-k-1}{r-l+1}\)。
第 \(c(l,r-1)\) 次,必须随机到 \([l,k]\) 中,概率为 \(\frac{k-l+1}{r-l+1}\)。
概率为
B
TestCase 1
考虑 100circle \((X,Y)\) 能追到这个人 \((x,y)\) 有哪些可能。
如果 \(y<Y\),那这两个人相当于做相遇问题,一定可以遇到。
反之,100circle 的运动相当于变成了四方向。所以一定会存在一个点 \((x,Y)\) 是相遇点。 100circle 必须赶在厕所小兵之前到达相遇点。
即 \(|x-X|>d-b\) 就追不到。
TestCase 6
观察样例的答案文件可知,答案似乎一定是 \(n-1\) 或 \(n\)。这一点是好证明的。
然后合理猜测,越大的 \(n\) 会使得答案为 \(n-1\) 的概率越大(当然你也可以看一下样例四)
输出 \(n-1\) 可以得到这 10pts。
TestCase 2,3
因此,我们发现只要保住一个厕所小兵不憋屈致死就变成了小 F 的最大目标。
小 F 可以放弃一个,去保住另外一个。
也就是两个厕所小兵不会同时憋屈致死当且仅当 \(|A_x-B_x|\ge \max(|A_y-B_y|,1)\)。
TestCase 4,5
同理,手玩一下可以发现,三个厕所小兵可以保住其一当且仅当 \(|A_x-B_x|=1\) 且 \(A_y=B_y\) 且 \(C_x\neq A_x\) 且 \(C_y\ge A_y\) 即可。
手玩能力很重要。
TestCase 6,7,8,9,10
若答案为 \(n\) ,100circle 看起来必定按照 \(y\) 从小到大去惩罚小兵。因为 \(y\to y+1\) 是八方向的,\(y\to y-1\)只有四方向。
如果 100circle 按照这样的路径惩罚所有 \(y<t\) 的士兵,但还是惩罚不了 \(t\) ,则答案必定为 \(n-1\)。
如果不存在上述情况,则答案必定为 \(n\)。
根据这个可以做到 \(\mathcal O(n^2)\)。不考虑排序部分,我们可以按照从小到大遍历 \(y\),需要特判 \(x\) 相等的情况,时间复杂度 \(\mathcal O (n\log n)\)。
C
我要学 SAM。

浙公网安备 33010602011771号