https://codeforces.com/contest/2121/problem/A
- 只要访问了点x1 和 xn,那么必然会访问到其他点,所以只用考虑这两个点即可
- 顺序是先从s走到两点中的其中一点,再走向另一个
所以距离一定有一段是xn – x1,代表着两点之间的转移,那么接下来就是判断先走到x1近,还是走到xn近,谁近就先去哪个点;
https://codeforces.com/contest/2121/problem/B
- 小写字母一共只有26个
- 如果B的长度 >= 2的话,那么它能够被优化成长度1
那么我们就可以去遍历字符b的位置,看下之前和最后的一个字符中有没有出现过b字符,根据性质1,我们可以用一个数组来代替set,时间复杂度O(n)
https://codeforces.com/contest/2121/problem/C
- 答案要么是矩阵元素最大值,要么是最大值- 1
- 支持我们去遍历一遍矩阵
根据性质1,我们只要判断下 所有的最大值是否在一个十字形上
问题就抽象成 : 给你k个权值val相同的点,保证其他点权值不为val,我们要判断它们在二维矩阵上是否满足能被一条十字线全部标记
解法:时间复杂度O(n * m)
我们开两个数组cntr和cntc分别表示第i行/列有多少个所求点
那么我们接下来遍历行和列,判断(cntr[i] + cntc[j] – (a[i][j] == val))== k
浙公网安备 33010602011771号