杂类
qq_19275839
这个作者很懒,什么都没留下…
展开
-
HihoCoder 1838 贪心
首先把2n+1张牌按照a的值升序排序,然后从头开始,每两张牌为一组,选出那组里b最大的那张,然后再选出最后落单的那张。 首先这么选b一定满足条件,接下来只要证明a是最大的即可。 因为a是升序排序的,所以即使我们每次都选了两者中a较小的那个,我们只要把序列倒过来看,即原来是1和2,3和4…2n-1和2n,2n+1落单,现在是2n+1和2n,2n-1和2n-2…最后1落单,这么看来,每组我们选的都是a...原创 2019-08-06 12:38:55 · 83 阅读 · 0 评论 -
CodeForces 1174D
我们拿到一个数组a,要求数组a的任意一个区间的所有数字的异或和不能为0或x。 首先,如果对于数组a,我们有他的前缀疑惑合数组b,那么数组a的任何一个区间的所有元素的异或和都可以用b中两个元素的异或和表示,那么我们就将问题转化为,最多可以有多少个数字两两异或不为0或x。对于这个问题,我们只需要从1到2n遍历,如果i没有被选取过,那就就选取他,顺便禁用i^x. 还有一个要注意的细节就是元素的个数可能为...原创 2019-08-05 19:57:10 · 162 阅读 · 0 评论 -
Hihocoder 1969 等差数列
复杂度我也不知道怎么证明,但是n3肯定是不行的,优化的方法就是建一个数组,如果一个数字存在就记录他的数量,不然就是0,寻找最大等差数列的时候n2确定首位的两个数,剩下的根据头两个数的间距去查找,应该会比n3好一点。 #include <iostream> #include <math.h> #include <iomanip> #include <stri...原创 2019-08-05 10:36:38 · 140 阅读 · 0 评论 -
Hihocoder 1755
题比较简单,注意一下111222333444这种情况,就是说要考虑到选取的几位也相同的情况。 #include<iostream> #include<math.h> #include<iomanip> #include <string> #include <cstdio> #include<stdio.h> #include ...原创 2019-08-03 20:25:29 · 77 阅读 · 0 评论 -
HihoCoder 1722 尺取法
对于每个数字,记录他的值以及他所在的行数,然后把所有数字从小到大排序,建立左指针和右指针,只要左右指针之间包含的数没有遍布所有行(用cnt计数,vis数组记录每行出现的次数),就将右指针右移。遍布所有行之后,左指针右移知道左指针对应的数字所在的行只出现了一次(如果再右移就不满足遍布所有行的要求了),刷新答案。 #include <iostream> #include <algor...原创 2019-08-11 12:06:51 · 303 阅读 · 0 评论 -
HDU 6336 找规律 容斥
通过观察可以发现,假设给的数组长度为l,如果l为奇数,那么ll的矩阵周期性出现,如果l为偶数,那么2l2l的方阵周期性出现,所以我们可以把2l * 2l的方阵存起来,然后写一个函数f,这个函数接受一个点,返回这个点与0,0点所代表的方阵中所有子元素的和,接下来只要运用容斥关系,把四个点扔进这个函数求值即可。 #include <iostream> #include <math.h...原创 2019-08-08 19:29:48 · 189 阅读 · 0 评论