关闭

[数学?] Codeforces871C. Points, Lines and Ready-made Titles

一个点向它上下左右的点连边每个联通块是独立的,只要方案数相乘就可以了如果一个联通块有环,那么它的所有边都能出现,通过删一些边就可以做到所有图案如果没有环就做不到所有边都出现,但其他情况都能出现。STL搞一搞搞一搞#include #include #include #include #include usin...
阅读(20) 评论(0)

[Meet in Middle] 51nod算法马拉松29 F. 空间统计学

Meet in Middle暴力过了…正解挖个坑,可能永远不会填了把…把9维坐标分成前4维和后6维令 fi,j,kf_{i,j,k} 表示前4维为 ii ,后5维与 kk 的距离为 jj 的点数(ii ,kk 状压)这样预处理下,然后再枚举一遍就好了复杂度应该是 O(45n+15×44n)O(4^5n+15\times4^4n)反正常数巨大#include #include <io...
阅读(10) 评论(0)

[最小基环生成树] Codeforces875F .Royal Questions

考虑在 aia_i 和 bib_i 之间连一条 wiw_i 的边这样会形成一个无向图。如果一个公主嫁给一个王子,就相当于给一条边定向,每个点只有一个入点如果把结果图拿出来,那么就是一棵基环树。求个最大基环生成树就好了以后打CF要先把题看完×2#include #include #include #include usin...
阅读(7) 评论(0)

[二分 ST表 杂题] Codeforces875D. High Cry

早知道先看D题就不会掉这么惨了枚举左端点,那么区间或值最多变化log次二分变化的区间,再二分区间或值大于区间最大值的区间用ST表记一下区间最大值、或值#include #include #include using namespace std;typedef long long ll;const int N=200010;int n,a...
阅读(46) 评论(0)

[FWT] Codeforces663E .Binary Table

套路题VP的时候发现这题过的人很多…把每一列状压,每一列就可以表示成小于 2202^{20} 的数字令 aia_i 为状态 ii 出现的次数, bib_i 为状态 ii 的贡献(也就是反转或不反转的1的个数的较小值)SS 表示哪些列被反转那么答案就是 minS{∑ai×bi⊕S}\min_S\{\sum a_i\times b_{i\oplus S}\}这就是个FWT的形式直接搞就好了#includ...
阅读(13) 评论(0)

[2-SAT] Codeforces875C.National Property

发现原来我并不会输出方案…这题只要找第一个不相同的位置 pospos如果 ai,pos>ai+1,posa_{i,pos}>a_{i+1,pos} 那么 ai,posa_{i,pos} 一定是大写,ai+1,posa_{i+1,pos} 一定是小写如果 ai,pos<ai+1,posa_{i,pos}<a_{i+1,pos} 那么如果 ai,posa_{i,pos} 是大写, ai+1,posa_{...
阅读(11) 评论(0)

[最小生成树 并查集] Codechef October Challenge 2017 .Lucky Edge

O(n)O(n) 枚举左端点,然后往右做一棵以编号为权值的最小生成树,每一条非树边覆盖的树边的编号一定小于它。那么再从左往右扫每条非树边,会对它覆盖的树边加上 n−i+1n-i+1 的贡献,但是树边只能被加一次所以可以用并查集把加过的树边的两个端点缩起来。这样也就不需要求LCA了O(n2α)O(n^2\alpha)然后卡卡常就好了…#include #include <iostre...
阅读(15) 评论(0)

[多维FFT Bluestein′s Algorithm] Codechef October Challenge 2017 .Chef and Horcrux

题目里那个 其实不重要,只要能算出 pip_i 就行了pip_i 的话发现就是个多维FFT的转移形式到Hillan大佬博客里拷了个代码改一改就好了…Bluestein算法里的FFT可以用暴力卷积代替,因为数据范围小FFT常数大#include #include #include #include #include<algori...
阅读(18) 评论(0)

[容斥 DP] LOJ#6077. 「2017 山东一轮集训 Day7」逆序对

考虑从小到大加入一个数,加入 ii 时会增加大于0小于 ii 对逆序对那么就相当于求 ∑ai=k\sum a_{i} = k 的方案数,其中 ai<ia_i<i这就是个很经典的背包了——BZOJ2431但是这题不能用背包来做考虑容斥。朴素的容斥要枚举哪些超过限制,这样复杂度是指数级别的,但是很多是有重复的令 fi,jf_{i,j} 表示用 ii 个数组成 jj 的方案数gi=∑fi,j×(n+k−j...
阅读(27) 评论(0)

[回文自动机优化转移] Central Europe Regional Contest 2014 G. Virus synthesis

一个可行的方案肯定是把一个回文串前后加上一些字符变成 SS 那么只要能DP出每个回文字串的方案就可以了,令这个方案为 ff如果一个回文串长度为奇数,那么它可以由 f去掉两端后的串+2f_\text{去掉两端后的串}+2 和 f最长回文后缀+leni−len最长回文后缀f_\text{最长回文后缀}+len_{i}-len_\text{最长回文后缀} 中的最小值转移过来。如果是偶数,那么它可以由 f去...
阅读(41) 评论(0)

[回文自动机 fail树] Codechef April Lunchtime 2015. Palindromeness

传送门有个很显然的做法就是建出回文自动机,然后在fail树上倍增找到长度小于等于一半的最长的回文后缀。这样复杂度是O(|S|log|S|)O(|S|\log|S|)但实际上每个点也可以维护一个half指针指向它的合法回文后缀,那么找当前点的half就沿着父节点的half指针的fail指针网上爬就好了复杂度就是建回文自动机的复杂度 O(|S|log|Σ|)O(|S|\log|\Sigma|)fail树...
阅读(20) 评论(0)

[字典树上建回文自动机] ICPC Preparatory Series by Team Akatsuki. Three Palindromes

传送门dfs整棵树,记录根到当前结点的字符串,然后从父节点在回文自动机上对应的节点开始转移就行了用基础的插入方法会被卡成 O(n2)O(n^2)#include #include #include #include using namespace std;const int N=100010;int n,cnt,tot...
阅读(27) 评论(0)

[分块 回文自动机] LOJ#6070. 「2017 山东一轮集训 Day4」基因

回文自动机那套理论可以在 翁文涛的集训队论文 里看每个串的回文自动机形态是固定的,一个子串的回文自动机也就是一个子图那么就可以用记忆化的方式来降低复杂度……我感觉好像就是论文里提到的“不基于势能分析的插入方法“#include #include #include #include #include #inc...
阅读(28) 评论(0)

[回文自动机] BZOJ3676 [Apio2014] . 回文串

回文自动机的简单应用…#include #include #include #include using namespace std;const int N=300010;int n,p,cnt=1; int nxt[N][30],fail[N],len[N],size[N]; char a[N];inline voi...
阅读(22) 评论(0)

[后缀自动机 DP] LOJ#6071. 「2017 山东一轮集训 Day5」字符串

fi,jf_{i,j} 表示前 ii 个串,以 jj 结尾的可接受的字符串的个数。那么DP的转移可以用后缀自动机转移#include #include #include #include using namespace std;const int N=4000010,P=1e9+7;int n,cnt=1,len; i...
阅读(44) 评论(0)

[莫队维护DP] LOJ#6074. 「2017 山东一轮集训 Day6」子序列

如果只考虑求一个数列的不同子序列个数,可以简单地DP出来fi=2×fi−1−flstai−1f_{i}=2\times f_{i-1}-f_{lst_{a_i}-1},其中 lstjlst_j 表示字符 jj 上次出现的位置,没出现过就忽略但是这样不好维护可以换一种DP方式,fi,jf_{i,j} 表示以字符 ii 开头,字符 jj 结尾的子序列个数。那么在左边新加一个字符 xx ,fx,if_{x...
阅读(31) 评论(0)

[最短路 杂题] LOJ#6075. 「2017 山东一轮集训 Day6」重建

刚开始以为可以二分…实际上是没有单峰性的。考虑每条边都加一个整数,那么肯定是使 ss 到 tt 的路劲经过的点变少。用DP算出经过 ii 个点到达 jj 的最短路,用 gi,jg_{i,j} 表示,以及只经过 ii 个关键点到达 jj 的最短路,用 fi,jf_{i,j}表示。如果经过 ii 个点不能到 jj ,那么 fi,j=inff_{i,j}=\inf 或 gi,j=infg_{i,j}=\i...
阅读(28) 评论(0)

[动态网络 网络流] LOJ#6068.「2017 山东一轮集训 Day4」棋盘

这种棋盘模型很像网络流但是边很难建。可以动态加边,每次跑完一边费用流,把流过的边重新建一条,加上费用就好了#include #include #include #include using namespace std;const int N=10010;int n,q,nx,ny,S,T,cnt=1,lst,G[N],an...
阅读(50) 评论(0)

[双联通分量 并查集] CEOI 2017. One-Way Streets

很显然如果一条边在双联通分量中,那么它两个方向都是可以的。否则的话,因为保证输入合法,那么就可以从两个点往 lca\text{lca} 扫没有扫过的边,把边定向。这个东西可以用并查集维护总复杂度就 O(n log n)\text{O(n log n)} #include #include #include #include <asser...
阅读(51) 评论(0)

[BZOJ4920][Lydsy六月份月赛 .D][数学][三分]薄饼切割

可以把线段分成无数个点,这些点经过的面积就是答案,显然这些点的轨迹是无数个同心圆,只要把最大的圆包围的面积减去最小的圆包围的面积就是答案了我是用三分求最小的圆的,这样比较方便,最大的圆肯定是线段的两个端点之一,比较一下就好了。 其他的画画图推推式子就好啦#include #include #include #include <cmat...
阅读(193) 评论(0)
245条 共13页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:39931次
    • 积分:2754
    • 等级:
    • 排名:第14184名
    • 原创:245篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    最新评论