01 2018 档案
摘要:题链 ans=2*(Σ(1<=i<=n)Σ(1<=j<=m)GCD(i,j))-m*n, 经典的反演。
阅读全文
摘要:题链 非常native的题目,我们考虑以下一些性质: .一个数若mo了一个小于自己的模数,那么其至少变成原来的一半。 我们构造三元对(i,j,k)表示当前做到i位,当前x可以取0至j,当前的答案是k+i*j, 我们考虑这样的转移: (i,j,k)to (i+1,j%num[i+1],k+i*(j-j
阅读全文
摘要:题链 一道很良心的省选题。 我们先考虑如何优雅的骗分。 有30%的程序精度要求K<=3,这个时候我们只要把题目给你的那个程序拿下来改一改就好了。 RP不差的话有30分。 我们再观察一波数据,发现N<=10时我们可以暴力枚举所有可能,除以N!求概率。 来一发50分代码(为了稳健,没播种子) // lu
阅读全文
摘要:题链 我们考虑拓扑排序,那么我们可以构造一个树结构,使其满足: 当一个点灭亡,其子树也灭亡。 我们考虑对一个点的所有边求lca,把这个点加到lca的子树里就好了。 答案就是子树的大小-1(减掉自己)
阅读全文
摘要:题链 我们统计一波区间的最大最小值。 answer=max(sum-区间最小值,区间最大值); 特判一点,当最小值>0时,那么我们把最小值减去,因为我们不能选一个圈。 一遍过样例什么的最虚了。
阅读全文
摘要:题链 我们求前缀和,则问题转化为找两点距离在l,r之间,求其差。 我们处理出这样一个东西(i,L,R)表示当这个和弦的左端点为i时在上限和下限中的最优值。(也就是右端点在[i+l-1,i+r-1]中) 我们将第一步处理出来的所有最优值扔到一个堆里面,然后每次从堆中选取最大的出来,将ans加上这个数
阅读全文
摘要:我们可以贪心的做。 如果不考虑如何判一个点被覆盖K次的话。这就是一道经典问题。 我们先把线段排序,那么我们考虑一个队列。 我们发现我们先把小的塞进队尾,等到塞的足够多(存在一个点被覆盖了K次)我们就更新答案并把队尾弹出。 我们可以用线段树维护点的覆盖次数K。 第一次写标记永久化,#define ma
阅读全文
摘要:题链 SOL:我们易得 N&1 时答案为0. 我们再考虑偶数。我们知道树的完美匹配<=1.(证明方法是贪心的把叶子拿下来)。 如果存在完美匹配的话,我们知道要用到的匹配边两侧有奇数个点, 不用到的边两侧有偶数个点, 我们知道输入不一定是有完美匹配的。那么我们可以用边旁边的点得奇偶性来分类这样的边,然
阅读全文
摘要:题链 构造法,让其sort后统统向后移一位,最小的变最大,再映射回去。 正确性,我们考虑变大的那一个(其他都变小,不取这个不可能),若是相等,必然要全取,得证。
阅读全文
摘要:题链 对每个k值判是否成环。 正确性基于拟阵的性质(那个k开头的算法的正确性)。
阅读全文
摘要:题链 资瓷,日常不打数学公式,扔个链接:传送门 扔个trick,生成函数的X可以是多项式,而且可以连续域的卷积。(平时的fft是离散的。) 狄雷克卷积可不可以我不知道,有大佬知道请告诉我一下。
阅读全文
摘要:1.assert(),ACM赛制,不在意罚时的话,这是神器。(博链) 2.杜教筛和洲阁筛可以用以下过程维护中间过程(单个): 3.cerr ,这个应该和 assert 差不多吧,都是奇技淫巧。 4.debug 时 #define deg printf,调试很方便。 5.volatile 乱序优化。
阅读全文
摘要:题链 脑洞题,我们发现要算的最多60位,后面一定是1. 随手打了这样的暴力,以为能A,结果T,查了下,pow,exp,log,用的是泰勒展开一直以为是表 那么预处理加二分
阅读全文
摘要:题链 我们发现这是一道模板STL题。 边听歌边debug效率好低。
阅读全文
摘要:一道脑洞题,我们发现不能在一起的点对还是比较少的。 我们考虑奇偶性,发现同奇偶性时一定可以,那么我们统计不可以的对,答案就是n-二分图的最大匹配。
阅读全文
摘要:1.std.size 是unsigned 类型,for (int i=1;i<=V.size()-1;i++)T飞走起。 2.l+r>>1 不会把符号位移下来,快速幂容易T 3.想想自己的read()有没有判符号位。 4.debug 时把分的块调小了,提交前记得改回来 5.记得取mo。 6.写指针时
阅读全文
摘要:1.22: NOI 2016 循环之美,一大早起来做DJ筛,神清气爽。(感觉脑子不够用)。 然后看到LOJ 和洛谷都说我宜参加模拟赛,开了一场 LibreOJ β Round #2 A:SOL 做法:大家要知道 LOJ 是非常快的~ B:SOL 做法:大家要知道 LOJ 是非常快的~ C:SOL 做
阅读全文
摘要:题链 我们要维护这四种操作: 在数组 A的末尾添加一个数 x。 输出 ∑ai(l to r) 将数组 A 中的每个数 A xor 一个数。 将数组 A 从小到大排序。 那么我们注意一件事,能很好的维护 XOR 操作的数据结构并不多: 1.路权并查集(什么鬼) 2.树状数组。 3.trie tree
阅读全文
摘要:题链 我们发现答案一直在减小,我们启发式合并,对每一个值开平衡树。那么是O(NlogN^2) 然而,我懒得写离散化了,所以MAP,莫名多一个log 大家要知道 LOJ 是非常快的~ 无力吐槽。
阅读全文
摘要:题链 我们发现LOJ是非常快的。 非常快 非常快 非常快 非常快 非常快 那么我们怎么能放弃写暴力的机会呢? O(N^5)的暴力,我们要相信LOJ。(我宁愿相信BZOJ) bitset位运算优化,01表示有无(最近怎么一直碰到,Atcoder,codeforce最近的比赛也有这样的题目)
阅读全文
摘要:题链 拿到这道题一脸蒙蔽,决策单调性二分处理所有的输入?看来一下数据规模: 1≤x≤n≤10^4 ,0≤m≤10^5 官方题解:直接 O(n2+m)O( n^2 + m )O(n2+m) 暴力即可,大家要知道 LOJ 是非常快的~ (⊙o⊙)… 非常快 非常快 非常快 非常快 非常快 更
阅读全文
摘要:题目链接 题解链接 (不会markdown只能甩链接了)
阅读全文
摘要:我们建SAM,在SAM上跑DP:(SAM不会点这里) 我们发现柿子的前半部分很好统计,那么我们只要搞后半部分。 我们反向建SAM,fa上的LCA就是其反串的前缀的后缀(原串的后缀的前缀)。
阅读全文
摘要:我们建SAM,在SAM上跑DP:(SAM不会点这里) 当T=1时,cnt.fa+=cnt;(因为这时我们一个点代表了很多的子串。) 当T=0时,cnt=1 然后DFS出解。
阅读全文
摘要:板子贴(很多都是以前打的,码风不太一样,以后有时间重新打一遍吧。) 总板子: #pragma GCC optimize("-O2") #include<bits/stdc++.h> #define getchar nc #define min(a,b) ((a)<(b)?(a):(b)) #defi
阅读全文
摘要:原题链接 题目大意: 给你一个序列,要求维护两种操作: 1,l,r,x: 在l到r这个区间将所有 值大于X的数减X 2, l,r,x 在l到r这个区间统计值等于X的数的个数。 N(序列长度<=10^5),max(a)(序列中的最大值<=10^5). 一道神题。 我们首先应该想到用数据结构优化,但是标
阅读全文
摘要:为了改变数论只会GCD的尴尬局面,我们来开一波数论: 数论函数: 数论函数是定义域在正整数的函数。 积性函数: f(ab)=f(a)f(b),gcd(a,b)=1 ,完全积性函数: f(ab)=f(a)f(b) 。 常见积性函数: φ(n) ,μ(n) (莫比乌斯函数), d(n) (因子个数),
阅读全文
摘要:一道比较良心的数论题: 枚举VIP的个数 x,求出第一种人个数的范围 [L,R]。 用类似求卡特兰数的方法可以得出答案为 C(n,x)=∑(i=L to R)C(n−x,i)−C(n−x,i+1)。 证明如下:我们可以先取X个VIP客人出来,因为其可以插入任意的位置。 那么我们只要求合法的50,10
阅读全文
摘要:我们发现我们要维护一个单调栈,我们可以采取以下策略: 我们始终维护其满足单调性。 我们发现一个位置最多可以更新c次。所以我们要C*n次。 但是我们发现这玩意有两头: 我们同时维护2个单调栈就可以了。 我们每次拿进来一个数,如果其小于c/2,将其扔右边,若大于c/2,扔左边就好了。 我们可以证明其小于
阅读全文
摘要:这是一道很有意思的题。 我们递归统计其出现的位置,就好了。
阅读全文
摘要:CDH分治,核心思想就是对操作进行二分。感觉和我以前对操作分块的思想很像啊,fhb分块 ……(⊙o⊙)… 日常懒得写模板的题解,转载一篇(本家) 分割线 在线/离线:首要考虑 在线算法: 可以以序列化的方式一个一个的处理输入,不必事先知道所有输入数据 离线算法: 必须事先知道所有的输入数据 (例如选
阅读全文
摘要:原题点这里 我们发现这道题可以用树状数组套权值线段树(主席树的一些优化) (不会点这里) 我感觉我这样写下去朴素的主席树要不会写了。 我们发现一个点对答案的贡献有两部份,在其之前比其大的,在其之后比他小的。 我们每次删除一个点,把其对答案的贡献减去就好了。 我们考虑一下这样所费的空间,我们知道删除时
阅读全文
摘要:我们发现,一个大小为X的集合的答案和在里面的元素是无关的。那么我们用ans[n]表示大小为n时的答案。 我们考虑如何转移这个答案。 我们发现ans[0]=ans[1]=0; 我们考虑增量法,答案可以被拆成最后一个强连通分量和之前的那部分,我们给出以下转移式 strong[i]表示一个大小为i的点集有
阅读全文
摘要:原题链接 这道题的真谛在于暴力加剪枝。 那么我们应该怎么暴力呢? 隆重推出A*搜索算法。 我们知道平时的bfs,dfs都是盲目的搜索,但是如果一道题的可行解我们大致知道方向的话,我们如果采取盲目搜索,未免太浪费时间了。 我们可以改变搜索的顺序,优先搜索期望出解概率高的地方,这就是A*算法。 A*改变
阅读全文
摘要:这玩意也叫回文树。主要解决回文串的问题。 回文串是一种十分特殊的字符串,拥有很多优美的性质。近年来,算法竞赛中有关回 文串的题目比较热门,但由于与回文串相关的算法比较贫乏,导致题目的解法比较单一。回文树是一种新兴的数据结构,由Mikhail Rubinchik在2015年发表。(战斗民族发明的数据结
阅读全文
摘要:懒得自己写了,转载一篇:本家 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。 如果一个字符串正着读和反着读是一样的,那它就是回文串。下面是一些回文串的实例: 1. Brute-force 解法 对于最长回文子串问题,最简单粗暴的办法是:找到字符串的所有子串,遍历每一个子串
阅读全文
摘要:我们可以把S与T每隔一位插入,构成一个新串A 首先,我们发现题目告诉我们旋转非交,那么事情就很好办了。 T中的字母有两种状态,一种是未翻转,一种是翻转,不翻转的S与T在这一位上一模一样,我们不去管它。 至于翻转的,就是一个回文串。 那么我们PAM(回文自动机)跑起来,成功滑稽。不会PAM的同学点这里
阅读全文
摘要:一道数论题。这很像BZOJ的一道题,好像是P^P^P^P......(无穷多个P)mod M的值。 我们知道当模数P是质数的时候,我们有 X^i=X^(i % p-1) (mod p) 我们不妨对其扩展,得到 X^i=X^(i% φ(p)+ φ(p))(mod p)(i>φ(p)) 我们又可证φ(φ
阅读全文
摘要:我们发现N很小,那么我们可以爆搜每个人取或不取,最后统计答案。
阅读全文
摘要:题目大意:老师要排座位,要求每个人的四周的邻居不是原来的,求方案 题目链接 SOL :min(n,m)<4 就暴搜,否则就构造。
阅读全文
摘要:一道英语阅读理解,满满的都是套路,欺负我英文不好(自己去翻译吧,我就不写中文了) 原题链接 我们模拟一遍就好了,如果"!"把句子中没出现的字母排除,"."就排除句子里出现的。 注意答案是从已知那个字母开始统计的。 #include<bits/stdc++.h> using namespace std
阅读全文
摘要:定义: 在mod P 域中,若 (a^i)!=(a^j) (0<=i,j<φ(p)) 则称其a为P的原根。 说人话就是: 如果g是P的原根,那么g的(1…P-1)次幂mod P的结果一定互不相同。 这个很重要,说明 a 是 一个群的生成元 那么我们如何求原根呢? 我们求原根,往往只要找一个就行了,那
阅读全文
摘要:A: 我们发现2^n增长很快,n>30时便没有贡献了。 B 我们dfs一边就好了。 C : 我们采取贪心的策略,我们先用A[i]去更新其后面的数据: 举个例子 a[1]=10 ,a[2]=100,那么我们发现a[2]永远比a[1] 劣,那么我们用a[1]的两倍更新a[2]. 我们再从高位向下做,我们
阅读全文
摘要:题目大意:给你一个子串,其在2^k方的十进制表示中出现过(后100位),让我们求k(k<10^50) 原题链接 SOL : 设a长度为n。 可以尝试构造一个数b,使得a⋅10^m+b成为其后缀。 令 x= a⋅10^m+b,则x=2^k(mod 10^(n+m)) 我们发现 2^(n+m)|x,且
阅读全文
摘要:原题这里 这题要用到树链剖分 不会树剖的同学点这里 把边权变为其dep比较深的那个点的点权,然后树剖(注意LCA的权值是不能算进去的。) //第一次树剖套线段树,以前都是套树状数组的。
阅读全文
摘要:点分治用来统计树上路径。 点分治的核心是分治。 我们选一个点,统计过该点的路径。然后分治每一颗子树。 我们如果选择重心的话,可以证明,最多递归logn次。 因为选择重心,我们每一次递归的子树节点数都要小于原树的一半,所以log级别。 那么我们如果统计过一点的时间是T(x),则总时间为O(logn*T
阅读全文
摘要:题目点这里 我们发现这道题可以用后缀自动机做(不会的点这里) 我们发现后缀自动机每条路径代表一条子串,那么我们就DP: 写法一 我们可以把DP方程化简一下,得到写法二
阅读全文
摘要:后缀自动机(不会点这里) 加入节点的时候记录一下这个点是不是代表后缀。建完以后重建一下后缀树在上面dfs就可以了= =(注意重建的时候是字典序排序,不是拓扑序 由于空间的关系,用map
阅读全文
摘要:后缀自动机,是一种线性的字符串处理工具: 引用一下陈立杰的PPT 有限状态自动机的功能是识别字符串,令一个自动机A,若它能识别字符串S,就记为A(S)=True,否则A(S)=False。 自动机由五个部分组成,alpha:字符集,state:状态集合,init:初始状态,end:结束状态集合,tr
阅读全文
摘要:SOL:以第一个串为模板建立后缀自动机,把后面几个串在SAM上跑一下。求max即可。 不会后缀自动机的同学点这里
阅读全文
摘要:我们知道有可持久化线段树,那么我们自然也想到平衡树是否也能可持久化,答案是肯定的。 现在我们给出一种数据结构:Treap。 不会的点这里 我们现在发现,旋转是一种很难持久化的操作,那么我们就要尽量避免旋转操作,我们引入以下2个操作: 1.spilt 对于一个Treap,我们需要把它按照第K位拆分,那
阅读全文
摘要:题目大意: 多组数据,给你一张真值表,求字典序最小的表达式。(真值表只有3个变量x,y,z) 我们发现答案不会很长,而且我们只有 256 种不同的输入,那么我们就可以打表。 我们怎么打表呢?我们发现答案不会很长,那么我们搜索表达式至len为20位,再加上最优性剪枝。跑个3min就出来了。 (看起来有
阅读全文
摘要:题目大意: 给你X门学科,每一门学科有两个参数,ti和·ai,我们想通过一门学科只有满足以下2个条件: 1.其尝试考试的simga ti <=T; 2.其尝试考试的次数<=ai 求最多通过的学科数,并输出方案。 SOL: 我们发现如果我们有考试却没有通过,我们还不如不考。 我们又发现其满足二分性质。
阅读全文
摘要:SOL 奇奇怪怪的题目,我们发现我们的值对答案的贡献,发现其的大于281的质因数对答案无贡献,那么我们可以用一个60大小的数组来表示一个数。一个区间的答案就是其积的欧拉函数值,那么我们用树状数组维护。(常数有点大)
阅读全文
摘要:SOL: 这是最难的一道题。我一脸蒙蔽。 首先我们发现正面做这道题很难。那么我们求答案的补集。 我们把图缩点后,若其为点数大于1的DAG,那么我们就认为其不合法。 利用容斥原理,DAG图的特征是有至少一个入度为0的点并且这个图不止一个点(这里及以下所说的点都是指求强连通后的 点),就根据这个进行容斥
阅读全文
摘要:玛里苟斯[清华集训2014 Day1] 魔法之龙玛里苟斯最近在为加基森拍卖师的削弱而感到伤心,于是他想了一道数学题。 S 是一个可重集合,S={a1,a2,…,an}。 等概率随机取 S 的一个子集 A={ai1,…,aim}。 计算出 A 中所有元素异或 x, 求 xk 的期望。 SOL : 这题
阅读全文
摘要:SOL::我们有以下dp 不难想到记f[i][j]表示统计到第i门课,此时j个人被碾压的方案数。 f[i][j] = f[i-1][k] * C[k][j] * C[n-k-1][n-rank[i]-j] * P[i] (k >= j) P[i]=∑(j=1 to U[i])j^(n−rank[i]
阅读全文
摘要:不知道在干什么 #pragma optimize("-O2") #include<bits/stdc++.h> #define LL long long #define int LL #define N 2007 #define mo 100000007 #define sight(c) ('0'<
阅读全文
摘要:SOL 树形DP f[i][j]表示i的子树中,最高覆盖到i向下第j层的最小花费。 g[i][j]表示i的子树全部覆盖,还能向上覆盖j层的最小花费。
阅读全文
摘要:网络流: #pragma GCC optimize("O2") #include<bits/stdc++.h> #define eho(x) for(int& i=hed[x];~i;i=net[i]) #define Eho(x) for(int i=head[x];~i;i=net[i]) #d
阅读全文
摘要:SOL:我们可以证明,设Sum[x]代表1到X编号的矮人被sum[x]个精灵挑为对手,则Sum[x]-x min的位置和其后一个是没有任何关系的(没有精灵会从这个矮人走向下一个矮人)。 那么我们就把其拆成了单链。贪心就好。
阅读全文
摘要:SOL 奇奇怪怪的贪心(你也不要问我为什么)
阅读全文
摘要:题目描述 SOL 奇奇怪怪的码农题。 我们考虑是一颗树怎么做,我们发现我们可以离线做,把车的限速排序,依次处理,我们首先是树剖,把边分成两类,最高速度小于车速和大于车速的。每次做之前先把最高速度小于当前车速的加到另一类。强行树剖维护。至于多出来的那一条边,我们记其练了A , B,记我们原来的始末位置
阅读全文
摘要:奇奇怪怪的题目,不知道他要我们干什么。 我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格。 仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解。
阅读全文