随笔分类 -  题解-codeforces

摘要:题目大意 给出n条水平线段和m条竖直线段,将其组合成一个多边形满足封闭且边不相交,构造方案 Σn+m<=1e3,len<=1e3 题解 被C搞死了 显然可以类似 这样构造,红色的按照水平大->小、竖直小->大放,黄色的反之 dp设f[i,j]表示放了前i和为j,bitset优化,最后逆推求出方案 问 阅读全文
posted @ 2020-11-02 09:17 gmh77 阅读(350) 评论(0) 推荐(0)
摘要:题目描述 题解 虽然不会做,但是感觉3500还是高了 首先在博弈问题中,如果一个状态的sg=i,那么一定存在一条从该状态出发的长度为i的链 设f[i,j]表示以i结尾,最后差为j的sg,则显然sg不超过√2maxc 所以直接dp存sg,设f[i,j]表示以i结尾,sg为j的最大差,显然随着差的不断减 阅读全文
posted @ 2020-10-29 19:08 gmh77 阅读(290) 评论(0) 推荐(0)
摘要:题目大意 给出一棵树,每条边边权为0/1,支持动态翻转边权,求每次操作后的最长和为偶数的链长 n<=5e5,5s 题解 lkyyds 还剩40min时胡乱思考,rush了3k然后假了 后来dyp点了一下发现最长链的两个端点一定有至少一个是直径端点 证明:如果直径的操作次数为偶数那么直接选直径,否则考 阅读全文
posted @ 2020-10-25 22:49 gmh77 阅读(307) 评论(0) 推荐(0)
摘要:题目大意 一棵树上有m个人,每个人有出现时间、速度以及起点终点,到达终点时会瞬间消失,求最早两人相遇的时间 n,m<=1e5 题解 树剖变成若干线段求交,按照时间排序后set维护即可,相交的两个只可能相邻所以只用考虑相邻两个的 注意考虑k相等的情况 code #include <bits/stdc+ 阅读全文
posted @ 2020-10-24 07:39 gmh77 阅读(142) 评论(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 add(a,b) a=((a)+(b)) 阅读全文
posted @ 2020-10-23 19:46 gmh77 阅读(120) 评论(0) 推荐(0)
摘要:题目大意 题解 好题 设0的个数为z,一个显然的结论是答案上界为z/2 以第z/2个0为分界划开,左边的称为L右边的称为R,那么L中右侧和R中左侧的0个数>=z/2 可以发现这样转化之后一个点只需要考虑在其所在集合的连边,即L集考虑向左的边R集考虑向右的边 因为总数<=z/2而任意一边的0个数>=z 阅读全文
posted @ 2020-10-15 21:33 gmh77 阅读(134) 评论(0) 推荐(0)
摘要:题目大意 题解 神仙题 直接在原序列上不好搞,考虑按照值顺序考虑,设直接加的为一类数,求和加进去的为二类数 有一个牛比结论:$[i(k2+1)+1,(i+1)(k2+1)]$中存在恰好一个二类数(i从0开始) 先假设这个是对的,当前已知第i段的数为x,考虑求第ki+t段的x',初始段为0目标段为(n 阅读全文
posted @ 2020-10-13 20:30 gmh77 阅读(153) 评论(0) 推荐(0)
摘要:题目大意 初始集合里有一个奇数x,每次可以把集合的两个数相加/异或并把结果丢到集合里,构造方案使得有1 操作的数∈[0,5e18] 题解 好玩的题 如果搞出了y=2^k满足y>x,那么可以把x不断*2后和y消,每次往前吞一位,最后可以得到y/2 在y<x时要先消掉x前面的二进制1,如此往复可以得到1 阅读全文
posted @ 2020-10-12 22:53 gmh77 阅读(148) 评论(0) 推荐(0)
摘要:题目描述 题解 首先有一个显然的重要结论:一个数减k后只会影响到最后log k位 所以先把异或和求出来,问题变成给出一些集合$(0,x ;xor ;(x-1),x ;xor ;(x-2),...x ;xor ;(x-k))$,在里面选择一些数异或起来求方案 这样的组数很少,因为只和最后log k位以 阅读全文
posted @ 2020-10-11 21:03 gmh77 阅读(128) 评论(0) 推荐(0)
摘要:题目描述 题解 止步于此 把边从小到大排序依次加入,维护f[i,j]表示在当前连通块i中有j个团的方案 团只考虑当前加入的边,加入一条边后先把两个块卷积合并(如果不同的话) 然后考虑新增的团,如果当前连通块不是一个团,那么如果要加就只能加一部分,即剩下一些边不加 由于当前边是连通块中最大的,所以不能 阅读全文
posted @ 2020-10-08 15:09 gmh77 阅读(262) 评论(0) 推荐(1)
摘要:题目大意 题解 结论:一个长度为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 阅读(206) 评论(0) 推荐(0)
摘要:题目描述 题解 知道是分块之后就不难了 把n分块,对于整块建AC自动机暴力跑,散块把全部串建AC自动机之后可以线段树查子树(因为往上查要考虑那些能查那些不能所以不好搞),也可以递归子树时用 出-入 计算 空间卡一卡可以$n\sqrt n$,如果再把询问[L,R]前缀和一下之后也许可以做到线性 时间O 阅读全文
posted @ 2020-09-18 22:00 gmh77 阅读(138) 评论(0) 推荐(0)
摘要:题目大意 题解 之前在看PE的Eulerian Circle那题的时候就想过生成树建图+矩阵树计数的问题,并且还想了一些做法,然后全部木大 结论:将图黑白染色,答案就是黑/白的生成树个数之和 第二个条件等价于图中无环,生成树即可满足 第一个条件根据左上第一个格子的情况讨论,发现两种情况刚好对应黑/白 阅读全文
posted @ 2020-09-18 19:40 gmh77 阅读(193) 评论(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 阅读(149) 评论(0) 推荐(0)
摘要:题目大意 题解 首先只有能被拓扑的点才能被选,分成森林之后考虑计算 如果一个树的根仍连向未选点,那么这个根要选的话只能最后选,dp求 否则一个树没有固定的最后选的,直接算会算重,考虑对于一种方案将其唯一计算 把树提出来,把点按照拓扑序编号,每次硬点前i-1个必选,第i个必不选,这样就可以唯一算到,对 阅读全文
posted @ 2020-09-17 12:02 gmh77 阅读(156) 评论(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 阅读(209) 评论(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 阅读(207) 评论(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 阅读(187) 评论(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 阅读(221) 评论(0) 推荐(0)
摘要:题目大意 题解 从各种意义上来说都很离谱的题 看到k<=1e3,一眼k^2logn,结果是(n+m)k,1.5s两亿 并且还是上升子序列,所以用nlogn的方法在不确定时维护指针扫一遍转移即可 转移的时候记下来上一个非-1的位置,最后贪心填 关于如果是单调不减的思考(口胡): 在维护的时候维护填入的 阅读全文
posted @ 2020-09-12 20:17 gmh77 阅读(192) 评论(0) 推荐(0)