09 2020 档案

摘要:题目大意 题解 半想半看myh的做法 官方题解是暴力枚举划分然后算,因为n和k很小所以跑得很快 首先有一个结论:一段有d个连续b段的染色结果是由rb+(d-1)个r或b所造成的 证明考虑归纳,首先d=1的时候成立,然后每加上一个b就把第一段b去掉,剩下的是d-1的情况;如哦加上一个r就考虑把第一段的 阅读全文
posted @ 2020-09-30 12:45 gmh77 阅读(213) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 网上的做法好像都要二分? 显然可以反向构造,如果A<B那就把AB交换把CD在序列上对称,然后最后答案把AB互换即可 假设找到最小的s满足(B+1)s>=A,然后显然是从后往前删A,并且不能有s个B连在一起 写法应该有很多,这里讲一种比较舒服的写法 首先特判掉只删末尾的情况,观察一下发 阅读全文
posted @ 2020-09-29 12:12 gmh77 阅读(126) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 和dyp交♂流过后写时发现完全不是一个东西 假做法:在原图上建生成树,按照min(两端点A-B)小到大排序,然后在建出来的树上换根dp 首先这个树不知道是不是对的,并且dp的时候可能会在子树内横跳 2.4k 真做法: 如果没有图的限制,那么显然按照A-B从大到小选,原因根据https 阅读全文
posted @ 2020-09-28 21:57 gmh77 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 简单dp 假设一个数的移动方向确定了,那么这个数可以移到方向所指的任意一个位置,等价于把这个数拿掉最后再放 那么剩下的是一个上升子序列,设f[i][j]表示考虑完1~i,上一个的是j 如果a[i+1]<a[j],那么显然不能放,加上左移的代价 如果a[i+1]>a[j],那么可以放也 阅读全文
posted @ 2020-09-27 22:28 gmh77 阅读(106) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 大概找了几分钟的规律 把表打出来,发现当n%k=0时SG为n/k,否则把%k≠0的部分拿出来,维护一个在原序列从0开始的指针跟着一起走,发现两个序列一样 按照题解的说法就是把%k=0的拿掉之后仍等于原序列,形式化就是sg[i]=sg[i-1-i/k] 证明考虑归纳,归纳发现n-n/k 阅读全文
posted @ 2020-09-27 21:26 gmh77 阅读(138) 评论(0) 推荐(0) 编辑
摘要:题目大意 |S|<=100 题解 标算是状压,这波出题人在地下室 一开始想直接设f[i]来求[1,i],然后枚举结尾重复串再考虑里面的,反演计算 以为里面的子问题可以设成g[i][j]表示循环节为i的长度为j的串的答案,然后假了,比如100100这种情况,100并不能表示成g 实际上直接把里面的暴力 阅读全文
posted @ 2020-09-27 20:22 gmh77 阅读(180) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 非常玄学的dp 首先一个很显然的东西,因为把x按照y翻转得到2y-x,所以每个点的最终系数为±2^k 假设有两种不同的方案得到同样的接,那么相减之后把正的放一边负的放另一边,因为10^100非常大以至于把其他的加在一起都不行,因此只要方案不同答案就不同 转化模型,从y向x连一条边,变 阅读全文
posted @ 2020-09-26 20:04 gmh77 阅读(276) 评论(0) 推荐(0) 编辑
摘要:题目大意 Cirno闲着无事的时候喜欢冰冻青蛙。 Cirno每次从雾之湖中固定的n个结点中选出一些点构成一个简单多边形,Cirno运用自己的能力能将此多边形内所有青蛙冰冻。 雾之湖生活着m只青蛙,青蛙有大有小,所以每只青蛙的价值为一个不大于10000的正整数。 Cirno很想知道每次冻住的青蛙的价值 阅读全文
posted @ 2020-09-26 16:22 gmh77 阅读(172) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 结论:一个长度为x的最优解一定是x-1加上当前加上后贡献最大的数 证明: 设x-1集合为S,假设加上一个数x,并且x不在最终的集合里面 设最终是S+S2,把S2中最小于x中最大的x的那个拿出来,设为y 一个数的贡献可以写作ai*k+bi,如果存在i<j且ai>aj那么显然i必选 因为 阅读全文
posted @ 2020-09-25 18:59 gmh77 阅读(193) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 比较有趣的构造题,不难 首先如果按顺序放的话增长数是指数级别的,1e15绝对不行 把矩阵黑白染色,那么约束条件只存在不同颜色的格子之间,确定一种颜色之后另一种就是四个方向lcm+1 题解做法:把两个方向的对角线都分配一个质数,一个格子的值是两条对角线的积,这样一个格子是n^4*常数级 阅读全文
posted @ 2020-09-24 19:52 gmh77 阅读(129) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 长的有点像agc030E实际上没有任何关系,仔细地xjb玩了一两天 正难则反,考虑一个串每次把a->bb,b->aa能变成什么,把相同长度的分为一层 a->bb b->aa aa->bba,abb ab->aaa,bbb ba->aaa,bbb bb->aab,baa …… 首先可以 阅读全文
posted @ 2020-09-23 22:37 gmh77 阅读(226) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 过于巧妙 关键点:无负环=差分约束有解 由于有i->i+1的0边,所以fi>=fi+1,又因为边的绝对值不超1,所以fi<=(fi+1)+1 设f[i][j]表示当前f相同的段是[j+1,i],枚举下一段结尾k转移,负边不能连同一个块,正边只能连同块和相邻两个块的 code #inc 阅读全文
posted @ 2020-09-22 21:08 gmh77 阅读(158) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 因为晚上摸鱼去了所以没打 设i有p个0q个1,则i的EGF(乘上(p+q)后)为 A=0:pep+qp A=1:pep+q+q 分治卷起来之后求x^k即可,特判p=q=0 code #include <bits/stdc++.h> #define fo( 阅读全文
posted @ 2020-09-21 22:43 gmh77 阅读(123) 评论(0) 推荐(0) 编辑
摘要:题目描述 题解 知道是分块之后就不难了 把n分块,对于整块建AC自动机暴力跑,散块把全部串建AC自动机之后可以线段树查子树(因为往上查要考虑那些能查那些不能所以不好搞),也可以递归子树时用 出-入 计算 空间卡一卡可以nn,如果再把询问[L,R]前缀和一下之后也许可以做到线性 时间O 阅读全文
posted @ 2020-09-18 22:00 gmh77 阅读(103) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 之前在看PE的Eulerian Circle那题的时候就想过生成树建图+矩阵树计数的问题,并且还想了一些做法,然后全部木大 结论:将图黑白染色,答案就是黑/白的生成树个数之和 第二个条件等价于图中无环,生成树即可满足 第一个条件根据左上第一个格子的情况讨论,发现两种情况刚好对应黑/白 阅读全文
posted @ 2020-09-18 19:40 gmh77 阅读(176) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 直接按要求平衡即可,因为源汇可以出入所以要连n->1 贡献根据c<f和c>f讨论,一开始把c设作max(c,f),根据f的变化使c在>=f的情况下尽量靠近原c code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a<=c 阅读全文
posted @ 2020-09-17 22:18 gmh77 阅读(140) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 很快想出来了,但细节挺多 可以发现答案是2L的倍数,每个数与T和X有关,和T的具体值关系不大 先把T模2L,将点分成四类,从右往左下车后能/否往右,从左往右下车后能/否往左,全否称为0,全是称为1,从右往左称为左,从左往右称为右 可以发现不存在先左后右的情况,因为一个左意味着x>L- 阅读全文
posted @ 2020-09-17 20:57 gmh77 阅读(332) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 首先只有能被拓扑的点才能被选,分成森林之后考虑计算 如果一个树的根仍连向未选点,那么这个根要选的话只能最后选,dp求 否则一个树没有固定的最后选的,直接算会算重,考虑对于一种方案将其唯一计算 把树提出来,把点按照拓扑序编号,每次硬点前i-1个必选,第i个必不选,这样就可以唯一算到,对 阅读全文
posted @ 2020-09-17 12:02 gmh77 阅读(144) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 哈希,表示成Σai*p^i(i可以为负),设Si表示后缀哈希值,sumi表示前缀>+1<-1的和 那么区间[l,r]满足当且仅当S_l-S_r*p^{sum_r-sum_}=S_1,移项后乘上p^sum(l-1),枚举lmap统计 要写双哈希 code #include <bit 阅读全文
posted @ 2020-09-16 12:24 gmh77 阅读(119) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 二分+hash判断 长链剖分求k级祖先 性质:一个点的k级祖先所在链长度>=k 证明:如果该点和祖先在同一条链上则得证,否则存在更长的链 在每条链顶维护往上/下len个,找的时候先跳到2i级祖先(2i<k且i最大),然后O(1)找即可 因为2^i级祖先所在链长度>=2^i,且k-2^ 阅读全文
posted @ 2020-09-15 22:52 gmh77 阅读(190) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 一道找规律的题目手玩了一天晚上直接打表切了我tmsb 一个显然的思路:把an用ab的某种运算表示出来,然后找规律 那么这个运算显然要满足结合律,题目给的运算并不符合 直接用置换群的概念,这样运算满足结合律,原来的f(p,q)=p1q 由于置换的乘法要考虑左右,因此$c=a 阅读全文
posted @ 2020-09-15 20:07 gmh77 阅读(166) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 缩点双前缀和判断,注意连通性与重边 code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a<=c; a++) #define fd(a,b,c) for (a=b; a>=c; a--) #define min(a,b) 阅读全文
posted @ 2020-09-14 21:59 gmh77 阅读(199) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 想了一天结果连边都没有挨到 结论:如果a1>=an,则车一定会先去1,之后从1去往n 证明:n=2时满足,n>2时如果车在n-1~n处,因为a1>=an所以1想的话可以直接消掉n的影响,同时2~n-1也会跟着这么做(其实根据题目的描述来说每个人的选择与本轮其他人的选择无关,但是也可以 阅读全文
posted @ 2020-09-14 12:10 gmh77 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题目大意 交互题 有一个[1,n]中的数x,要求在10000次操作内找出,有一个集合{1...n}和三种操作 A:询问集合内a的倍数个数 B:询问集合内a(a>=2)的倍数个数,同时删掉除x外所有a的倍数 C:回答 题解 在被Good Bye2019打出心里阴影后九个月没打了尝试上分 由于10000 阅读全文
posted @ 2020-09-13 07:26 gmh77 阅读(173) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 裸题 建SAM,在SAM上面数位dp维护位置和当前长度即可 注意要先枚举新加的数,然后统一跳fail直到可以往下接,否则时间不能保证 时间复杂度O(10*nd^2) code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a 阅读全文
posted @ 2020-09-12 21:42 gmh77 阅读(203) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 从各种意义上来说都很离谱的题 看到k<=1e3,一眼k^2logn,结果是(n+m)k,1.5s两亿 并且还是上升子序列,所以用nlogn的方法在不确定时维护指针扫一遍转移即可 转移的时候记下来上一个非-1的位置,最后贪心填 关于如果是单调不减的思考(口胡): 在维护的时候维护填入的 阅读全文
posted @ 2020-09-12 20:17 gmh77 阅读(177) 评论(0) 推荐(0) 编辑
摘要:题目描述 有n堆石子,第i堆有xi个。 Alice和Bob轮流取石子(先后手未定),Alice每次从一堆中取走a个,Bob每次从一堆中取走b个,无法操作者输。 不难发现只会有四种情况:Alice必胜;Bob必胜;先手必胜;后手必胜。 你需要选定若干堆石子(共有2^n种方案),Alice和Bob只能在 阅读全文
posted @ 2020-09-12 15:11 gmh77 阅读(372) 评论(0) 推荐(1) 编辑
摘要:题目大意 题解 类似二维,二分后变成一个六顶点八面体,维护四对面x+y+z,x+y-z,x-y+z,x-y-z的限制 要求对这个不等式组求解,想过一些做法感觉不可行 考虑换元,设A=-x+y=z,B=x-y+z,C=x+y-z,则x+y+z=A+B+C,变成关于A+B+C,A,B,C的限制,这个可以 阅读全文
posted @ 2020-09-11 22:41 gmh77 阅读(120) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 直接费用流连边有n^2条边,所以考虑新建四个点分别表示四种绝对值情况,然后和这四个点连即可 因为求的是最大值所以没有问题 code 记得标记队列里的元素 #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a<=c; a++) # 阅读全文
posted @ 2020-09-10 22:09 gmh77 阅读(130) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 不知道能不能过的乱搞做法:求出一次重心和二次重心,暴力判断路劲上的,从二次开始判断应该会更快,还可以加个二分 一条链就直接二分并判断相邻两个的值,往更小的那边跳 树的话就点分治算重心答案再判断临边,但如果是菊花图就炸了 设一个点的贡献时wx^1.5,其中x是距离,改成判断导数即可,走 阅读全文
posted @ 2020-09-09 22:49 gmh77 阅读(195) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 一开始想枚举每段的分界再判断,然而不好搞 实际上把每个点到两边的距离设为(x,y),类似https://www.cnblogs.com/gmh77/p/12813589.html,变为用一条折线把所有点分成两个集合 直接dp折线,转移时要么继承上一行位置,要么转移到前面的某个点,线段 阅读全文
posted @ 2020-09-09 21:35 gmh77 阅读(184) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 把一个点拆成两个点,L->R和R->L连成二分图,n-匹配数就是链数,链数-1就是答案 所以贪心匹配就行了,最后根据首尾LR情况有4种,LR和RL在存在LL或RR时都可以消掉 如果同时存在LR和RL且没有LL和RR就会挂掉,所以在找的时候优先构出LL和RR即可 这样的话就不会同时有L 阅读全文
posted @ 2020-09-08 22:40 gmh77 阅读(219) 评论(0) 推荐(0) 编辑
摘要:题目大意 https://www.luogu.com.cn/problem/AT4502 题解 二分+map/栈判断 code #include <bits/stdc++.h> #define fo(a,b,c) for (a=b; a<=c; a++) #define fd(a,b,c) for 阅读全文
posted @ 2020-09-08 21:31 gmh77 阅读(201) 评论(0) 推荐(0) 编辑
摘要:题目大意 题解 不难但是因为字符串太菜所以想了很久 排行榜上跑得快的一些做法假了,不知道有没有更简单的做法 结论:存在一种最优序列,使得Si是Si-1的后缀,证明把任意一种最优的不断删掉末尾将其顶住 也可以同时满足开头但是不需要,这样可以写个O(n^2)KMP暴力来拍 把SAM建出来,同一个点上的串 阅读全文
posted @ 2020-09-08 20:40 gmh77 阅读(107) 评论(0) 推荐(0) 编辑
摘要:题目大意 一个长度2n的ab各n个的ab串,每次可以同时删第i个a和第i个b,求剩下的最大字典序的串 n<=3000 题解 菜 把a当作+1b当作-1,在前缀和为0的位置划开变成若干段,那么删只会影响到段的内部 结论:在同一个段内,每个ab对(x,y)的x和y的大小关系相同,否则一定会经过前缀和为0 阅读全文
posted @ 2020-09-07 17:17 gmh77 阅读(225) 评论(0) 推荐(0) 编辑
摘要:题目描述 N,Q<=5e4 题解 基础线段树 先算al<=ar的,之后取反再算一次 设L[i]表示往左第一个大于当前的位置+1,R[i]是往右小于的-1 那么区间[l,r]满足条件当且仅当R[l]>=r且L[r]<=l 枚举右端点,在x处维护[x,x~r]的最大值,考虑r-1->r的变化 加入的区间 阅读全文
posted @ 2020-09-05 17:17 gmh77 阅读(209) 评论(0) 推荐(0) 编辑
摘要:题目大意 https://www.luogu.com.cn/problem/AT3721 题解 设f[i][j][0/1/2]表示到点i统计的是深度为j的,在点i的和为0/1/>1 长链剖分,再记个时间维护f[2]->f[0]的 code #include <bits/stdc++.h> #defi 阅读全文
posted @ 2020-09-03 22:32 gmh77 阅读(166) 评论(0) 推荐(0) 编辑
摘要:题目大意 给出长度为m的数组s和数字N,求多少个数k满足0<=k<N且对于每个i=0~m-1,都有gcd(k+i,N)=1当且仅当si=1 m<=40,N以Πpi^ai的方式给出,n<=5e5 题解 先把01翻转变成在x%p=0的x处填1,填出来的显然按照Πpi为一个周期,所以只需要考虑ai=1的情 阅读全文
posted @ 2020-09-03 20:38 gmh77 阅读(236) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示