摘要: 1274 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> #include <queue> using namespace std; const int inf 阅读全文
posted @ 2020-02-10 15:42 IAT14 阅读(239) 评论(0) 推荐(0) 编辑
摘要: 0边把图分成两个部分,这两个部分的路径之间,mex起码为1,都对答案产生1的贡献。 然后1边接在0边旁边,把图分成了更小的两个部分(0,1的两端),和一些不会再产生新的贡献的区域,这两个更小的部分路径之间,mex起码为2,都对答案又产生了1的贡献。(他们在刚刚算mex起码为1的时候,已经贡献过1了, 阅读全文
posted @ 2020-02-10 10:49 IAT14 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 我们倒着看,如果当前水桶 比右面水桶多,就把他俩匀一下。然后再往右接着看,如果匀过的这两个比右面第三个大,就把他们三个一起匀一下,复杂度O(N^2)。 我们考虑优化,如果一段被匀了之后,那么他们水位相同,之后要匀也一定是一起匀,就可以看作一个整体了。每个水桶只会被加入到整体一次,我们维护下每一段的开 阅读全文
posted @ 2020-02-10 10:18 IAT14 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题意没有太读懂...导致我没写完。 就是按照顺时针给你一些点,问这些点是否中心对称。 就用1和n/2+1,求一个中心点。然后看2和n/2+2,3和n/2+3...所求出的中心点是不是一个同一个就行了。 注意n为奇数一定不行。 1 #include <cstdio> 2 #include <cmath 阅读全文
posted @ 2020-02-10 10:16 IAT14 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 那个函数的功能f(x,y)就是把y有1的位置,对应的x位置也都变成0。所以我们发现只有第一个数不同会带来结果变化,后面怎么排序没关系。 我们考虑那个数当第一个数最后结果最大。我们记录下二进制下每一位,出现过多少个1。然后依次枚举每个数当第一个数,然后把这个数1的位置对应出现1次数减去1,如果变0了, 阅读全文
posted @ 2020-02-10 10:14 IAT14 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 排序后,中间相邻的两个分别作为两个班级的中位数必定最优。 因为两个中位数必定一个在前半段,一个在后半段,那么显然中间两个差值最小。 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 int a[210000],T, 阅读全文
posted @ 2020-02-10 10:11 IAT14 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 把所有0加成1,乘积不为0。 如果求和为0,就随便选一个正数再+1就行。如果没有正数,那么显然和为负数也不为0。 1 #include <cstdio> 2 using namespace std; 3 int T,n,res,sum,a[110]; 4 int main() 5 { 6 for ( 阅读全文
posted @ 2020-02-10 10:09 IAT14 阅读(154) 评论(0) 推荐(0) 编辑