12 2019 档案
摘要:考虑将三个矩形按某种方式划分为再三个大矩形中找最大值,容易发现只有6种划分方式,分为两类:1.4种,考虑第一条横/竖和第二条在第一条的两侧,这一类情况只需要预处理出左上/左下/右上/右下的最大子矩阵即可2.2种,两条横线/竖线划分,以横线为例,只需要处理处每一行的答案,然后,然后简单维护一下即可 1
阅读全文
摘要:考虑令,那么每一次操作相当于让且,相当于从i向i+1移动x个石子,那么容易发现偶数堆没有用处,因为另一方可以用同样的操作,因此问题相当于从n往前的奇数堆的nim游戏,异或即可 1 #include<bits/stdc++.h> 2
阅读全文
摘要:转化题意,如果一个点k符合条件,当且仅当k能到达1和n考虑如果l和r()符合条件,容易证明那么[l,r]的所有点都将会符合条件,因此答案是一个区间枚举答案区间[l,r],考虑如何判定答案是否合法,也就是要求满足l能到达n且r能到达1,那么预处理出f1[i]表示i能到达1的最少边数,f2[i
阅读全文
摘要:先贪心,容易发现如果两个点中间没有点对,那么一定可以先把这两个点消掉分析一下,就可以发现这样两个点的答案就是这两个点对中间不成对的点数量扫描过去,线段树维护每一个点的权值(是否会被算入答案)即可 1 #include<bits/stdc++.h> 2 using namespace std; 3 #
阅读全文
摘要:首先,容易发现前两项都是定值,那么就是要最小化后面的数字构
阅读全文
摘要:首先可以发现模3意义下有循环节,也就是1,-1,1,-1……考虑对于x个1,y个0,判断是否存在3的倍数1.x为偶数时一定可以,选择等量的1和-1即可2.x为奇数,要满足且,这是可以用3个0*(-1)和3个1*1来抵消掉(如果y=2时也可以,因为此时总共有奇
阅读全文
摘要:将这张图化简,不断删掉度为1的点(类似于拓扑排序),构成了一张由环组成的图考虑一个连通块中,设点数为n,边数为m(已经删掉了度为1的点),那么一共只有三种情况:1.一个环(),一定为YES2.多个环嵌套(),一定为NO3.两个环(),其实可以看成有两个点(可以重
阅读全文
摘要:考虑将最上中最左的跳蚤孤立,容易发现他的上面和左面没有跳蚤,因此只需要将他的右边和下边替换掉就可以了答案为-1有两种情况:1.c>=n*m-1;2.c=n*m-2且这两只跳蚤相邻对于其他情况,将所有跳蚤建图后判断:1.是否有多个连通块;2.是否有割点即可,由于跳蚤数量很多,容易发现只需要选择周围5*
阅读全文
摘要:很容易想到哈夫曼树,容易扩展得到贪心:优先选最小的k个合并,堆维护即可为了保证深度最小,可以加入深度权值,在权值相同时选择当前深度最小的即可(注意:由于可能最后一次不足k个,那么显然可以将这些不足的放到最深的位置来减小答案,需要补上权值为0的点来保证每一次都有k个) 1 #include<bits/
阅读全文
摘要:对于一个分数x/y(x和y互素),在k进制下为纯循环当且仅当y和k互素证明:任意一个分数都可以写成0.abbbbbbbb的形式(不妨假设a尽量短),设a的位数为l1,b的位数为l2,那么原分数即必要性:当l1=0的时候分母与k互素,即纯
阅读全文
摘要:将所有区间按照长度排序,枚举最小长度和最大长度,然后判断区间内是否存在符合条件的m个区间这个东西由于右端点单调递增,所以即:1.支持插入区间;2.支持删除区间;3.维护是否存在被m个区间覆盖的点对于3操作,可以视为维护区间max,即区间加减和区间max,线段树即可 1 #include<bits/s
阅读全文
摘要:由于字符串是AABB的形式,枚举AA和BB中间的位置,分别考虑AA和BB的数量,乘起来sigma一下即为答案以下考虑AA的情况(BB同理),枚举A的长度,然后按照这个长度分为若干块,那么每一个A一定可以表示成某一段的结尾+下一段的开头,同时两个A又要连续,也就是相邻两块的lcp和lcs,最终答案用差
阅读全文