程序自动分析(并查集) NOI出这种题我还有什么好说的呢…… 拆点并查集即可。 代码 软件包管理器(树链剖分、线段树) 一个支持区间赋值和区间和的线段树+树链剖分即可 代码 寿司晚宴(数论、状压DP) 数论题\(n \leq 500\)肯定是什么暴力算法…… 注意到每一个数\(> \sqrt{n}\)的因子最多只
利用SAM建出后缀树,树上每个节点计算一下|right|、right集合中ai的最大、次大、最小、次小值即可。 #include<iostream> #include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<algorithm>using namespace std;#define ll long long#define N 600010#
题解 树剖模板题,每次改变是\(1\)或者是\(0\),区间求和和区间修改就可了。 ac代码 # include <cstdio> # include <cstring> # include <algorithm> # include <ctype.h> # include <iostream> # include <cmath> # include <map> # include <vector> #
题目大意 有两个集合\(S_1,S_2 \subseteq [2,n] (n\leq 500)\),且对于\(\forall x\in S_1,y\in S_2 , gcd(x,y)=1\) 求\(S_1,S_2\)有多少种方案 两种方案不同,当且仅当 方案一的\(S_1\)与方案二的\(S_1\)存在一个元素不同 或 方案一的\(S_2\)与方案二的\(S_2\)存在一个元素不同 题解
细节........ Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout) #define maxn 1000006 #define inf -0x3f3f3f3f3f3f3
题解: 提高组系列难度题.....竟然各种假贪心 瞄了网上结论 竟然 n%(k-1)不足1要补齐....orz这个真没想到 涨知识涨知识.... 补齐以后直接类似合并果子 堆贪心就行了 #include <algorithm>#include <iostream>#include <cstring>#include <cstdio>#include <vector>#incl
***题目链接戳我*** 又是在树上瞎搞滴题目.... 我们如果以安装的软件为1,未安装的软件为0,那么软件改变的数量即树上权值总和的数量,涉及到区间修改,区间查询,考虑树剖 分析完毕,似乎没啥好说的了。。。树剖模板题(然鹅我是不会告诉你们我因为把int打成char查了好久好久代码滴
题目大意: 给定一个序列,定义两个后缀是k相似的当且仅当这两个后缀有长度为k的公共前缀。 求对任意\(r\in [0,n-1]\),\(r\)相似的后缀的对数和两个后缀乘积的最大值。 思路: 先考虑后缀数组是如何计算两个后缀的lcp,发现是对于一段连续的height取min。 于是对于制定的相似度r,height < r
Description 给定多个 $ x_i x_j $ 是否相等的条件 判断能否实现给每个 $ x_ i $赋上合适的值满足条件 Solution 考虑用并查集实现 若两个数相等,则表示它们的祖先相同 给出的条件要先排序,把所有相同的条件放在前面先处理 数的范围很大,并查集数组开不下,需要离散化一下 Co