time/min solution POJ 1753 Flip Game 20min 枚举 poj1753#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<functional> #include<iostrea
在 预处理出字典树上的哪些节点会匹配字符串,删掉
using namespace std; #define For(i,n) for(int i=1;i<=n;i++) #defin
#include<algorithm> #include<functional> #include<iostream> #include<cmath> #include<cctype> #include<ctime> using namespace
#define Fork(i,k,n) for(int i=k;i<=n;i++) #define Rep(i,n
Alice和Bob两人玩游戏。两人各有一个棋子,开始时在有S任何时候,当两个棋子到达同一点时,Alice胜出(规则2)。如果游戏永远无法结束,Bob胜出(规则3)。两人都遵循最优策略,轮流移动
有2个栈和一些双端队列,每次可以从栈首或双端队列边取走一个数,取走数的和多大的人赢。 如果先手者和后手者都使用最优的策略,最后先手者和后手者分别能够取得的总石子数分别是多少。对于一个栈,取法唯一, 对双端队列,长度为奇数取法唯一,否则先手可以取走max(所有奇数位,所有偶数位)1. 1 2 0 4 3 3 4 0 2 1 如果所有序列都是单调(且取的那一边最大)的,取最大那个就行了现考虑2
#define For(i,n) for(int i=1;i<=n;i++) #define Fork(i,k,n) for(int i=k;i<=n;i++) #d
N<=500000显然wwRwwR 本身就是偶数回文串 设它为(x−2l+1,x−l),(x−l+1,x),(x+1,y),(x+l+1,x+2l) 枚举这个回文串的中点x,找最大的y使y−py≤x且x≤y≤x+px/2第一个条件可以用插入set时的顺序维护,第二个lower_bound即可#include<bits/stdc++.h>using namespace std;
考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最 大出现值。 字符串长度≤300000回文树模板题建立回文树,则每个节点对应了一个本质不同的回文串,出现次数为cnti 于是暴力遍历即可一个长度为n的字符串本质不同的回文串最多有n个。#include<bits/stdc++.h>using na
已知2个排
对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和。现在给定三个正整数k,a,b,请求出满足a<=n<=b且k*f(n)=n的n的个数 已知三个正整数k,a,b(1<=k,a,b<=10^18,a<=b)f(n)的取值范围很小,不超过1600 因此k*f(n)的取值有1600个,故n的取值亦然 只要把符合条件的n验证一遍就行n=k∗t n=k*t k∗f(n)=n k*f(n
给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问点a的颜色,可以离线 n,m,c<=10^5,首先把一个点的dfs序值和深度变成2维平面的点 (In i ,d i )(Out i ,d i ) 于是变成矩阵修改与单点求值显然可以树套树,kd-tree
ring>
给一张混合图的无向边定向,使得原图强连通,题目保证有解。显然,如果只有无向边,那么原图必边强连通,故用tarjen走一遍就行。 现在考虑有有向边的情况, 对于一条无向边,把它从图中删除,因为原图强连通,故 - 存在一条路径从u到v - 存在一条路径从v到u 必然满足一条。 若只满足一条,就把边的另一个方向填上。 否则这条边删除不影响答案。#include<bits/stdc++
lib>#
给定一个数列,删除一个连续长度m的序列,使剩下的序列逆序对对数最少 ..a l−2 a l−1 [a l ..a r ] a r+1 .. 把删除的序列左右两侧的数各放在一颗线段树中统计 ,每次移动一步,求逆序对注意数组清0时不能直接memset,否则TL
给定一张n≤3000 先求出MST, 然后令f[roo][i] 表示以roo为根,是否存在一条非树边(roo,v) 其与树链 (roo,x) 构成环(roo→x→v→roo) 然后对于一条边(x,v) ,然后让v的子树作根,连接到x以下的节点去。#include<bits/stdc++.h>using namespace
已知n<100个点取k<n个,求这k个点构成凸包的最大面积。先求出凸包,枚举凸包上第一个点(只要枚举前⌈n/k⌉#include<cstdio>#include<iostream>#include<cstdlib>#include<cstring>#include<algorithm>#include<functiona
一颗树每个点上有点权,求每个点与它子树中的点的点权是否互质。cnt(d)表示i的倍数出现次数,则答案=∑d|viμ(d)cnt(d)dfs 的时候后减前即可。由于2∗3∗5∗7∗11∗13>105 , 所以一个数的质因子数不超过6个 复杂度可以保证#include<cstdio>#include<cstring>#include<algorithm>#i
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号