ACM
文章平均质量分 71
记录ACM的刷题记录和一些板子。
Sanzo00
sanzo.top
展开
-
跳表
跳表思想和二分类似,普通链表查询的复杂度是O(n)O(n)O(n),跳表另外建立了索引逐层的查找效率高些。跳表每层建立的索引没有严格按照二分的要求,即每层减少一般,它是采用一种随机的方式,当插入一个数据时随机的确定他的层数,每次随机的概率时0.5。理论上和二分的效率相同。struct Node{ int val, level; Node* levels[16];};class SkipList{private: int MAX_LEVEL = 16; int c原创 2020-10-22 18:40:31 · 130 阅读 · 0 评论 -
LeetCode每日一题 416. 分割等和子集
题目链接思路转化成背包问题class Solution {public: bool canPartition(vector<int>& nums) { if (nums.size() < 2) return false; int sum = 0; for (int &it : nums) { sum += it; } if (sum & 1)原创 2020-10-11 14:05:22 · 134 阅读 · 0 评论 -
牛客IOI周赛19-普及组 C.小y的旅行
题目链接题意n个点m条边的无向图,最少需要删除多少条边,使得编号≤k\le k≤k的点不在一个环上。思路采用并查集将编号都大于K的边进行合并,这样相当于将一些无关的边进行缩点,然后再进行一次并查集,找到剩余成环的边。#include <bits/stdc++.h>using namespace std;const int N = 1000001;int fa[N];int find(int x) { return fa[x] == x ? x : fa[x] = fin原创 2020-10-04 23:28:46 · 182 阅读 · 0 评论 -
牛客IOI周赛19-普及组 B.小y的序列
题目链接题意长度为n的序列,最少需要修改多少个数字,满足a[i+1]=a[i]+i, i∈[2,n]a[i+1] = a[i] + i,\ i\in[2, n]a[i+1]=a[i]+i, i∈[2,n]。思路1满足等式的序列是固定的,可以用序列的首元素a0a_0a0表示整个序列,也就是说序列的首元素a0a_0a0,对应一个唯一的序列。遍历整个数组,假设当前数字不需要调整,对这个序列进行计数,即通过计算得到首元素,对这个首元素进行标记。最后选择一个出现次数最多的一个序列,原创 2020-10-04 22:39:16 · 153 阅读 · 0 评论 -
BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)
BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)题目链接题意nnn个字符串,询问每个字符串一共有几个子串至少出现在nnn个字符串中的kkk个思路: 拓扑建广义后缀自动机, dp[i]dp[i]dp[i]记录每个节点表示符合条件的数量,按照拓扑序更新dpdpdp,然后跑这nnn个串计算答案思路: 启发式合并set记录每个节点在那几个串中出现过,在parentparentp...原创 2019-11-01 22:14:21 · 255 阅读 · 0 评论 -
牛客-139 I. Substring(后缀数组 or 后缀自动机)
牛客-139 I. Substring(后缀数组 or 后缀自动机)题目链接题意一个由{a,b,c}\{a, b, c\}{a,b,c}组成的字符串SSS,求S子串的最大的集合,使得集合里的字符串互不同构思路一:后缀数组一共有3种字符,所以一共有6中映射关系,首先将字符串转化为6个同构的字符串.然后求这个字符串一共有多少个不同的字符串非连续的子串"aabaabaab",与他同构的有6...原创 2019-11-01 18:13:38 · 294 阅读 · 0 评论 -
BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机)
BZOJ-2780 Sevenk Love Oimaster(广义后缀自动机)题目链接题意给出n个字符串,询问m个串一共出现在几个字符串中.题解广义后缀自动机板子题将n个串建在一起,每次插入新的字符串时回到根节点字符串如果出现在另一个字符串中,一定可以在后缀自动机上匹配到,而且在后缀自动机中就是一个前缀的后缀即一个节点的后缀(slink)建完广义后缀自动机之后,把n个串出现的节点标...原创 2019-10-31 21:46:11 · 173 阅读 · 0 评论 -
CF-1207 F. Remainder Problem(分块)
CF-1207 F. Remainder Problem(分块)题目链接题意一共5e5个数字,两种操作:1 x y , a[x] += y2 x y , $\sum\limits_{i\in{n}}{a_i}, n\in{[1, 5e5]}, n % x = y $思路分块5e5=707\sqrt{5e5} = 7075e5=707模数大于707的数字暴力求,复杂...原创 2019-10-31 16:29:22 · 427 阅读 · 3 评论 -
CF-346 D. Robot Control(反向建图spfa)
CF-346 D. Robot Control(反向建图spfa)题目链接题意有向图(有环)中有一个机器人,机器人有三种规则:重复访问同一个点会自我销毁无路可走会自我销毁多岔路口会随机选择为了让机器人安全的从SSS到TTT,可以在多岔路口制定它的方向来避免情况1,2的发生,求最少需要指定方向几次思路有一个转移方程:对于点uuu和它所有的出边vvv,dp[u]dp[u]dp[...原创 2019-10-24 22:55:50 · 234 阅读 · 0 评论 -
CF-1249 F.Maximum Weight Subset(贪心)
CF-1249 F.Maximum Weight Subset(贪心)题目链接题意在一棵树上选一些点构成一个集合,满足集合内任意两点的距离大于kkk,求集合的最大权值和思路一共200个点,可以从最低层的点uuu开始,默认选择这个点,然后将它距离kkk的点权值减小val[u]val[u]val[u]表示这些点不选.这样向上找的时候如果碰到权值为正的点,表示选择这个点的权值更优,同时不会影...原创 2019-10-24 15:40:55 · 376 阅读 · 0 评论 -
CF-1209 F. Koala and Notebook(建图BFS)
CF-1209 F. Koala and Notebook(建图BFS)题目链接题意n个城市m个双向边,从点1可以到达任何点,把点1到到其他点所经过的边写成一行可以得到一个大数,你的任务使得这个数字尽可能的小.思路例如第i条边是u->v,把这条边拆成u->i_1->i_2->…->i_n->v然后bfs:对于相同状态的点依次从小数[0-9]扩展,扩展...原创 2019-10-21 23:20:25 · 280 阅读 · 0 评论 -
CF-557 E. Ann and Half-Palindrome(暴力Trie)
CF-557 E. Ann and Half-Palindrome(暴力Trie)题目链接题意给定一个字符串,求第K个半回文子串.半回文串:对于字符串SSS, $S_i == S_{n-i+1} ,,,i\in[{1, \frac{|s|+1}{2}]}$思路暴力找所有合法的区间,首先枚举长度iii,ok[l][r]=1ok[l][r] = 1ok[l][r]=1表示区间[l,r]...原创 2019-10-21 00:18:30 · 232 阅读 · 0 评论 -
CF-241 E.Flights(差分约束)
CF-241 E.Flights(差分约束)题目链接题意n个点m条边,每条边可以赋值为1或2,问能否使所有从1到n的路径值相同思路所有路径和相同,也就是到达每个点的路径和相同首先求出所有在1到n路径上的点对于一条边[u,v][u,v][u,v],$ 1\le dis[v] - dis[u] \le 2 $addedge(u, v, 2)addedge(v, u, -1)然后差分...原创 2019-10-20 17:24:56 · 279 阅读 · 0 评论 -
CF-196 D.The Next Good String(hash)
CF-196 D.The Next Good String(hash)题目链接题意给一个数字ddd和字符串sss,求字符串ttt满足:sss和ttt等长ttt的字典序大于sss且尽可能小ttt中不包含长度≥d\ge d≥d的回文串思路不包括长度≥d\ge d≥d的回文串,只需检查是否包含长度为ddd和d+1d+1d+1的回文串回文串可以用hash来判断首先求出最小的字典序,...原创 2019-10-19 22:59:29 · 305 阅读 · 0 评论 -
CF-825 G.Tree Queries(DFS)
CF-825 G.Tree Queries(DFS)题目链接题意一棵树nnn个节点(初始为白色),两种操作:1 xxx 把节点xxx设置为黑色2 xxx 求节点xxx到任意一个黑色节点的简单路径上的最小编号的节点输入ttt和zzz,其中ttt表示操作类型,x=(last+z)%n+1x = (last + z) \% n + 1x=(last+z)%n+1,lastlastlast...原创 2019-10-19 15:53:43 · 323 阅读 · 0 评论 -
CF-1207 G.Indie Album(Trie上跑AC自动机)
CF-1207 G.Indie Album(Trie上跑AC自动机)题目链接题意nnn个串,串的生成方式有两种:单独一个字符在上一个串的基础上加一个字符qqq个询问,问第iii个串中出现串sss的次数思路离线处理询问,把询问的字符串建AC自动机,并得到failfailfail树对于一个字符串sss出现的次数等于failfailfail书上对应的节点和它所有子节点出现次...原创 2019-10-19 12:52:31 · 277 阅读 · 0 评论 -
CF-778 C.Peterson Polyglot (Trie合并)
CF-778 C.Peterson Polyglot(Trie合并)题目链接题意给一个TrieTrieTrie树,问删除那一层剩下的节点数最少,输出最小数量的节点数和删除的最小层数删除节点之后,子节点相同的点会合并在一起思路枚举删除每个节点,计算它对这一层的贡献删除的实现是通过合并节点来实现的首先新建节点nownownow表示合并之后的节点,此时需要删除节点xxx即merge(n...原创 2019-10-17 15:58:32 · 500 阅读 · 0 评论 -
CF-85E.Guard Towers(二分+染色)
CF-85E.Guard Towers(二分+染色)题目链接题意nnn个灯塔分成2分,求出最小的曼哈顿距离和其方案树题意二分+染色二分枚举最小值midmidmid,判断能否将nnn个灯塔分为最大曼哈顿值不超过midmidmid的两份方案数=2联通块个数2^{联通块个数}2联通块个数#include <bits/stdc++.h>const int maxn = 5e3...原创 2019-10-16 20:17:11 · 419 阅读 · 0 评论 -
CF-1023F.Mobile Phone Network(并查集缩点)
CF-1023F.Mobile Phone Network(并查集缩点)题目链接题意你手里有K条边还没有分配权值,已经存在M条边带权值,如何给你手中的边分配权值,使得K条边都在最后的最小生成树中且最后权值和最大.思路首先将K条边权值设为0求一个最小生成树.对于剩下的边,当且仅当加入这条边形成环上的最小权值为这条边的权值时,才能保证K条边不会被替换同时权值尽可能的大.对剩下的边,优先考...原创 2019-10-13 21:12:54 · 262 阅读 · 0 评论 -
CF-1147D Palindrome XOR (建图划分等价类)
CF-1147D Palindrome XOR (建图划分等价类)题目链接题意给一个长度为n的01串c(可能存在’?’,表示可以为0或是1)问多少个数对(a,b)满足:$ 1\le a < b<2^n$a,b的二进制都为回文串a ^ b = c思路建图划分等价类枚举a的长度[1, n-1]0:表示两个数字相同1:表示两个数字不同回文串对应的位置建0边按照...原创 2019-10-11 21:40:20 · 240 阅读 · 0 评论 -
CF-1238E. Keyboard Purchase (状压dp)
CF-1238E. Keyboard Purchase (状压dp)题目链接题意长度nnn的字符串为排成一行,这个字符串由mmm个字符组成,你需要确定一种排列方式使得这个字符串的花费最少.花费=∑i=1n∣possi−possi−1∣\sum\limits_{i=1}^{n}|pos_{s_i} - pos_{s_{i-1}}|i=1∑n∣possi−possi−1∣思路状压...原创 2019-10-10 21:02:22 · 241 阅读 · 0 评论 -
CF-527E(Data Center Drama) 欧拉图+构造
CF-527E(Data Center Drama) 欧拉图+构造题目链接题意nnn个电脑mmm个网线(存在环和重边),你可以添加最少数量的网线并规定他们的方向,使每个点的出度都为偶数并且每个计算机相互连接.输出任意一种方案.思路首先将所有的点补成偶度,考虑到欧拉回路,可以保证所有的计算机相互连接.把欧拉回路想象成简单环, 让偶数编号的点指向两边,可以保证出度为偶数#include ...原创 2019-09-27 21:49:31 · 333 阅读 · 0 评论 -
CF-567F(President and Roads) DAG必经边
CF-567F(President and Roads)题目链接题意S−>ES->ES−>E的DAGDAGDAG中求:DAGDAGDAG中必经边输出"YESYESYES"DAGDAGDAG中非必经边求这条边最少降低多少可以使这条边变成必经边思路判断必经边可以用方案数判断,对于一条边{u,v}\{u,v\}{u,v},如果way[u]∗rway[v]==w...原创 2019-09-26 23:31:48 · 477 阅读 · 0 评论 -
CF-477C(Dreamoon and Strings) DP
CF-477C(Dreamoon and Strings)题目链接题意两个串S,TS,TS,T,问SSS中删除[1,∣S∣][1,|S|][1,∣S∣]个字符之后,最多有多少个不重叠的T串思路dpdpdpdp[i][j]dp[i][j]dp[i][j]: 位置iii前删除jjj个字符之后的最大值deldeldel: 表示位置iii前至少删除多少个字符出现串TTTdp[i][j]=...原创 2019-09-26 20:38:20 · 456 阅读 · 0 评论 -
CF-525E(E. Anya and Cubes) Meet-in-the-Middle
CF-525E(E. Anya and Cubes) Meet-in-the-Middle题目链接题意n(n≤25)n(n \le 25)n(n≤25)个数字 kkk次染色机会.选择一个数字并对它染色贡献为ai!a_i!ai!,不对它染色贡献为aia_iai;不选择这个数字贡献为0.求一共有多少种方案在染色不超过kkk次的前提下使得总的贡献为S(S≤1016)S(S \le10^{16...原创 2019-09-26 19:42:55 · 202 阅读 · 0 评论 -
CF - 741(C. Arpa’s overnight party and Mehrdad’s silent entering) 二分图构造
题目链接题意有N对情侣,每个人都吃一种饭,给出情侣的座位编号.有以下两个要求:情侣之间不能吃相同的饭座位号连续的三个人不能吃同一种饭问是否存在满足的解.思路构造二分图对应情侣的座位建边,保证情侣之间不吃一种饭[2i-1, 2i]建边,保证座位号相邻的3个人不全吃一种饭#include <bits/stdc++.h>const int maxn = 2e5 ...原创 2019-09-21 22:31:09 · 183 阅读 · 0 评论 -
CF-558E(E. A Simple Task)
CF-558E(E. A Simple Task)题目链接题意长度为NNN的串,给qqq次修改每次修改给出一个区间[L,R][L,R][L,R],你需要将区间的字符按照升序或降序排列.输出qqq次修改的串.思路对于每个区间我们可以用计数排序,这样效率高一点.但如果对于每个询问我们都O(n)O(n)O(n)遍历这样效率有点低,所以可以用线段树维护每个字符在每个位置的状态.对于一个询问先...原创 2019-09-19 23:53:17 · 263 阅读 · 0 评论 -
CF-786B(Legacy) 区间最短路
题意有三种边[u,v], [u, [L,R]], [[L,R], v],求从S出发到其他所有点的最短路思路线段树维护区间建图#include <bits/stdc++.h>const int maxn = 1e5 + 5;const long long inf = 1e18;const int mod = 1e9 + 7;using namespace std;int...原创 2019-09-19 17:31:36 · 465 阅读 · 0 评论 -
CF-547E(Mike and Friends)后缀数组+线段树 AC自动机+DFS序+树状数组
题意NNN个串,每次询问区间[L,R][L,R][L,R]中有多少子串SiS_iSi思路把NNN个串合成一个长字符串,对这个长字符串求后缀数组,包含SiS_iSi的子串的heightheightheight连续排列,可以用线段树维护height对应原串的位置,每次询问变成找区间[L′,R′](lcp(L,R)>=Si)[L',R'](lcp(L,R) >= S_i)[L′,...原创 2019-09-18 20:42:43 · 306 阅读 · 0 评论 -
HDU - 6598 Harmonious Army (最小割)
题目链接题意每个人可以选择两种角色(A,B)(A, B)(A,B),给定MMM个关系(x,y)(x, y)(x,y),如果x,yx, yx,y同时选择AAA总的攻击力加aaa,如果x,yx, yx,y同时选择BBB总的攻击力加ccc,如果x,yx, yx,y分别选择A,BA,BA,B总的攻击力加ccc,求如何分配使得总的攻击力最大?思路转化为最小割模型,统计所有流量,构造使得最小割为多加的...原创 2019-08-27 12:29:57 · 209 阅读 · 0 评论 -
HDU - 6704 K-th occurrence (后缀数组+主席树)
题目链接题意QQQ次询问,每次询问求SSS的子串出现KKK次的位置思路刚开始想的是AC自动机,但是建自动机会超时,后来学长提供了后缀数组+主席树的思路Orz...Orz...Orz...出现KKK次的字符串,在后缀数组中连续出现,求出询问对应后缀前后满足区间内的height>=lenheight >= lenheight>=len的最长的区间,此时区间[...原创 2019-08-23 23:41:41 · 262 阅读 · 0 评论 -
HDU - 1429 胜利大逃亡(续) (BFS+状压)
题目链接思路因为新拿到一把钥匙所以相同位置可以重复走,一共10把钥匙二进制表示拿到的钥匙,判断下个位置是否可以走。#include <bits/stdc++.h>const int maxn = 1e5 + 5;const int mod = 1e9 + 7;const int inf = 0x3f3f3f3f;using namespace std;char g[25...原创 2019-08-22 16:34:10 · 140 阅读 · 0 评论 -
HDU - 2825 Wireless Password (AC自动机 + 状压dp)
题目链接题意求至少包含KKK个给定字符串长度为NNN的字符串思路把所有可能的字符串建AC自动机,遍历所有节点dp[i][j][k]dp[i][j][k]dp[i][j][k] 表示以节点jjj为终点的长度为iii包含状态为k的字符串的方案数,dp[i][j][k]=dp[i][j][k]+dp[i−1][fa[j]][t],t∈(0,1<<m)dp[i][j][...原创 2019-08-22 14:16:04 · 195 阅读 · 0 评论 -
大整数板子
struct BigInteger{ int A[25]; enum{MOD = 10000}; BigInteger(){memset(A, 0, sizeof(A)); A[0]=1;} void set(int x){memset(A, 0, sizeof(A)); A[0]=1; A[1]=x;} void print(){ prin...原创 2019-08-21 23:20:35 · 174 阅读 · 0 评论 -
HDU -2243 考研路茫茫——单词情结(AC自动机+矩阵快速幂)
题目链接思路假设让求长度为LLL且不包含词根的个数,对所有的词根建acacac自动机,然后用矩阵MMM表示可转移状态,最后最快速幂即可。如何求长度不超过LLL且不包含LLL且不包含词根的个数,可以利用这个矩阵[M101]\begin{gathered}\begin{bmatrix} M & 1 \\ 0 & 1 \end{bmatrix}\end{gath...原创 2019-08-20 13:09:53 · 155 阅读 · 0 评论 -
2019牛客暑期多校训练营(第十场)C - Gifted Composer (二分+哈希)
题目链接题意NNN次操作每次选择在字符串SSS的开始或者末尾拆入一个字符串,每次操作询问当前字符串一共有多少种循环节思路对最终的字符串做哈希处理,记录每次操作对应字符串SSS的区间[L,R][L, R][L,R],二分找到循环节长度为XXX的字符串的最后出现的操作N2N_2N2,长度X的循环节的贡献[N1,N2][N_1, N_2][N1,N2],最后统计答案即可#include ...原创 2019-08-17 23:54:49 · 435 阅读 · 1 评论 -
POJ - 2942 Knights of the Round Table (双连通分量)
题目链接题意有N个骑士,每个骑士有自己不喜欢的人,你需要选择奇数个骑士开一个圆桌会议,每个骑士不能和自己不喜欢的人挨着坐。问需要删除那些人,这些人不能组成圆桌会议思路按照补图建边求双连通分量,然后判断双连通分量中是否有奇圈判断是否存在奇圈可以判断二分图,如果不存在二分图则存在奇圈统计可以组成圆桌会议的人,总数减去即可#include <iostream>#incl...原创 2019-08-16 12:08:33 · 214 阅读 · 0 评论 -
图论
奇圈判定双连通分量中含有奇圈,其他点也在某个奇圈中双连通分量中含有奇圈,必定不是二分图(充要)二分图最小路径覆盖 = 点数 - 最大匹配最大独立集 = 点数 - 最大匹配最点覆盖 = 最大匹配最大团 = 补图的最大独立集...原创 2019-08-16 12:22:00 · 923 阅读 · 0 评论 -
HDU - 6661 Acesrc and String Theory (后缀数组)
题目链接题意求字符串SSS中满足字串可以复制KKK次得到的字串的数量,不位置字串相同的字符串分开计算思路看题解补完的这道题枚举循环节的长度XXX,从头找到字符串SSS中连续出现循环节的最多的字串,假设当前求得的区间是[L,R][L, R][L,R],lcp(R+1,L)lcp(R+1, L)lcp(R+1,L)即为字串向后可以扩展的长度(长度小于XXX),相反求向前可以扩展的位置。这样每...原创 2019-08-15 10:43:10 · 472 阅读 · 0 评论 -
Luogu-P4768 (Kruskal重构树+最短路)
题目链接思路按照海拔降序建重构树,这样每个节点的子树能表示海拔大于等于它的所有点预处理所有点到1的最短路对于每个询问找到最低的海拔高度,然后找子树中所有点到1的最小值找子树中最小值,可以在建重构树的时候预处理出来,不用每次都dfsdfsdfs这样会超时…#include <bits/stdc++.h>const int maxn = 1e6 + 5;const in...原创 2019-08-14 10:46:22 · 158 阅读 · 0 评论