随笔分类 - 省选及NOI系列
摘要:题链 SOL: p与a不互质时,设c=b mod φ(p)(专门设出来是因为公式不能正常显示),如果b>=φ(p):a^b≡a^(c+φ(p)) (注意b<φ(p)的时候再减φ(p)) 我们可以证明 φ(p) 在 log次迭代后到达1,以后的数就不会对答案产生贡献。 那么我们暴力计算每个数的logn
阅读全文
摘要:题链 SOL: 可以把原题看做在n*k个数里选p个数且p%k=r, 有DP f[i][j]=f[i-1][j]+f[i-1][j-1] 矩阵快速幂加速转移即可。
阅读全文
摘要:题链 SOL:我们枚举最晚的一门学科在什么时候出成绩,统计答案即可。 我们考虑两种方法,搞一搞就好了。
阅读全文
摘要:题链 ans=2*(Σ(1<=i<=n)Σ(1<=j<=m)GCD(i,j))-m*n, 经典的反演。
阅读全文
摘要:题链 一道很良心的省选题。 我们先考虑如何优雅的骗分。 有30%的程序精度要求K<=3,这个时候我们只要把题目给你的那个程序拿下来改一改就好了。 RP不差的话有30分。 我们再观察一波数据,发现N<=10时我们可以暴力枚举所有可能,除以N!求概率。 来一发50分代码(为了稳健,没播种子) // lu
阅读全文
摘要:题链 我们考虑拓扑排序,那么我们可以构造一个树结构,使其满足: 当一个点灭亡,其子树也灭亡。 我们考虑对一个点的所有边求lca,把这个点加到lca的子树里就好了。 答案就是子树的大小-1(减掉自己)
阅读全文
摘要:题链 我们求前缀和,则问题转化为找两点距离在l,r之间,求其差。 我们处理出这样一个东西(i,L,R)表示当这个和弦的左端点为i时在上限和下限中的最优值。(也就是右端点在[i+l-1,i+r-1]中) 我们将第一步处理出来的所有最优值扔到一个堆里面,然后每次从堆中选取最大的出来,将ans加上这个数
阅读全文
摘要:我们可以贪心的做。 如果不考虑如何判一个点被覆盖K次的话。这就是一道经典问题。 我们先把线段排序,那么我们考虑一个队列。 我们发现我们先把小的塞进队尾,等到塞的足够多(存在一个点被覆盖了K次)我们就更新答案并把队尾弹出。 我们可以用线段树维护点的覆盖次数K。 第一次写标记永久化,#define ma
阅读全文
摘要:题链 我们发现这是一道模板STL题。 边听歌边debug效率好低。
阅读全文
摘要:题目链接 题解链接 (不会markdown只能甩链接了)
阅读全文
摘要:我们建SAM,在SAM上跑DP:(SAM不会点这里) 我们发现柿子的前半部分很好统计,那么我们只要搞后半部分。 我们反向建SAM,fa上的LCA就是其反串的前缀的后缀(原串的后缀的前缀)。
阅读全文
摘要:我们建SAM,在SAM上跑DP:(SAM不会点这里) 当T=1时,cnt.fa+=cnt;(因为这时我们一个点代表了很多的子串。) 当T=0时,cnt=1 然后DFS出解。
阅读全文
摘要:原题点这里 我们发现这道题可以用树状数组套权值线段树(主席树的一些优化) (不会点这里) 我感觉我这样写下去朴素的主席树要不会写了。 我们发现一个点对答案的贡献有两部份,在其之前比其大的,在其之后比他小的。 我们每次删除一个点,把其对答案的贡献减去就好了。 我们考虑一下这样所费的空间,我们知道删除时
阅读全文
摘要:原题链接 这道题的真谛在于暴力加剪枝。 那么我们应该怎么暴力呢? 隆重推出A*搜索算法。 我们知道平时的bfs,dfs都是盲目的搜索,但是如果一道题的可行解我们大致知道方向的话,我们如果采取盲目搜索,未免太浪费时间了。 我们可以改变搜索的顺序,优先搜索期望出解概率高的地方,这就是A*算法。 A*改变
阅读全文
摘要:这玩意也叫回文树。主要解决回文串的问题。 回文串是一种十分特殊的字符串,拥有很多优美的性质。近年来,算法竞赛中有关回 文串的题目比较热门,但由于与回文串相关的算法比较贫乏,导致题目的解法比较单一。回文树是一种新兴的数据结构,由Mikhail Rubinchik在2015年发表。(战斗民族发明的数据结
阅读全文
摘要: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层的最小花费。
阅读全文

浙公网安备 33010602011771号