- 博客(91)
- 资源 (2)
- 收藏
- 关注
原创 [TravelNotes] ZJOI 2017 DAY2 酱油记
Pre 反正正常颓颓颓 没事划划水 准备过退役生活04/25 早上没事点开SHOI的题 然后T1水题? T2不会? T3不会? 感觉自己弱爆了 心态爆炸 然后听学弟讲述了T2的做法 就是上帝与集合的正确用法? 到宾馆后走上了这题的不归路 似乎标程数据有误? 然后我自己写的代码调来调去调不清楚? 意识模糊 直到现在我好像还是没A? 在yyzx的食堂碰见了ah队爷lj和jmx 我开始期待在
2017-04-29 07:07:54 895 1
原创 [差分 上下界最大流] SRM 694 div1 SRMDiv0Easy
考虑差分下 那么区间[l,r][l,r]加就会让ll加 r+1r+1减 那么就两点间连边 因为所有数相等 那么ai,i>1a_i,i>1都等于0 这就是流量平衡 那么S向1点连边 n+1向T点连边 跑下界最大流就好了 答案就是流量// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<
2017-04-28 20:37:34 440
原创 [manacher 后缀自动机 || 回文自动机] BZOJ 3676 [Apio2014]回文串
本质不同的回文串只有O(n)O(n)个 就是做manacher时变长的时候 那么直接在SAM上找找出现几次就好了 回文自动机?我不会啊#include<cstdio>#include<cstdlib>#include<map>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ s
2017-04-28 20:33:48 541
原创 [后缀数组] BZOJ 2119 股市的预测
类似 [Noi2016]优秀的拆分枚举 A 的长度 l,把字符串中所有下标为 l 倍数的位置标记出来。左端点 A 的部分一定恰好包含一个标记点。 枚举每一个标记点 i,它的对应点是 i+l+m,后缀数组求出往前 最多对应相同的位数 L 和往后最多位数 R。 贡献为 max(0,min(L-1,l-1)+min(R-1,l-1)+1-l+1);#include<cstdio> #includ
2017-04-28 20:29:25 467
原创 [后缀数组 主席树] BZOJ 4556 [Tjoi2016&Heoi2016]字符串
二分答案 t,在后缀数组上找到与 [c,d] LCP 大于等于 t 的区间 [l,r]。 相当于询问 [l,r] 中是否存在 [a,b − t + 1] 里的数字 主席树#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100
2017-04-28 20:27:19 495
原创 [后缀数组 贪心] BZOJ 4278 [ONTAK2015]Tasowanie
两个指针 显然小的那个先放 如果一样 比后一个 再一样 再后 然后就转化成比较后缀的字典序了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p
2017-04-28 20:25:24 474
原创 [多项式] COGS 有标号的二分图计数系列
我是抄的 orzzQAQ_bipartite_one∑k=0nCkn∗2(n−k)∗k\sum_{k=0}^n C_n^k*2^{(n-k)*k} 注意这里是2(n−k)∗k2^{(n-k)*k}不是2(n−k)+k2^{(n-k)+k} 怎么卷? 2(n−k)∗k=(2√)n2(2√)k2∗(2√)(n−k)22^{(n-k)*k}={(\sqrt 2)^{n^2}\over{(\sqrt 2
2017-04-24 21:10:44 679
原创 [后缀自动机 后缀树 虚树] BZOJ 3879 SvT
挺无脑的一个题 直接反串后缀自动机建出后缀树 然后询问建虚树#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1=
2017-04-24 21:00:44 673
原创 [莫队 分块] BZOJ 4866 [Ynoi2017]由乃的商场之旅
这个 只会莫队乱搞 自己YY下 复杂度O(n26∗n−−−−−√)O(n\sqrt{26*n}) 成功贴时限过加时间垫底#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;inline char nc(){ static
2017-04-24 20:58:41 964
原创 [树上莫队] BZOJ 3460 Jc的宿舍
只要发现这个强制在线是假的就可以离线莫队了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; retu
2017-04-24 20:56:58 905
原创 [背包DP || 多项式] 51Nod 1597 有限背包计数问题
这是个多重背包 直接做肯定接受不了时间复杂度 我们看当体积大于 n√\sqrt n 时 是用不完的 是个完全背包 但还是接受不了复杂度 再观察 体积大的总共只可能取n√\sqrt n个 令fi,jf_{i,j}表示拿了 ii 个 总体积为 jj 的方案数 这样转移 每次全部加1 或者新加入一个⌊n√⌋+1\lfloor \sqrt n \rfloor+1体积小的嘛 总共根号种 前缀和转一下
2017-04-22 21:08:39 718
原创 [环套树 树形DP 期望] BZOJ 2878 [Noi2012]迷失游乐园
瞎DP一下就好了 不过是搞得我蛮昏的 我懒 找一篇题解就当做我写过题解了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf
2017-04-22 21:00:11 587
原创 [状压DP 边双连通分量] BZOJ 3590 [Snoi2013]Quare
陕西出出来的好题 题解注意一个边双可以拆成一条链和一个小边双 然后就可以了 f[i]:集合状态为i.且使在i中的点双联通的最小权值. h[i][j][0]:一个端点是j.另一个端点在点集i中的边的最小权值. h[i][j][1]:一个端点是j.另一个端点在点集i中的边的次小权值. g[i][j][k].集合状态为i.且使在i中的点构成一条链.两端点分别是j和k的最小权值.#
2017-04-22 20:57:56 790
原创 [DP 容斥原理] HDU 5519 Kykneion asma
扔下题解就跑 其实我也没全搞懂 先挖个坑#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int P=1e9+7;const int N=20005;ll fac[N],inv[N];int cnt[1
2017-04-22 20:55:23 675
原创 [树形DP] BZOJ 4835 遗忘之树
一个不难的题吧 最后半小时才想到 树形DP咯 fuf_u 表示点分树上子树u的方案数 之后呢 转移关键就是要乘上这级重心向下一级子树中的那个点连边 因为重心会有两个 而这里规定是编号小的优先 如果下一级子树中没有第二个重心 那么就连哪个都行 否则 只能连比uu标号小的 我可能学傻 写了个主席树 能不能不要主席树我还不清楚#include<cstdio>#include<cstdlib>
2017-04-22 20:53:20 719
原创 [数论 反演] BZOJ 4833 最小公倍佩尔数
当时比赛时灵机一动 把gigi−1g_i\over g_{i-1}喂给了OEIS 然后就找到了 233 就是这个咯 然后就水过去了 题解?题解我还没看 先挖个坑UPD:跟这个题是一毛一样的咯#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const
2017-04-22 20:48:42 1417
原创 [杂题] BZOJ 4801 打牌
这个A题让我很无奈啊 还是留念一下好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100
2017-04-22 20:45:36 506
原创 [FMT 莫比乌斯变换 子集和变换] BZOJ 4036 [HAOI2015]按位或
vfk的论文题 看过组合数学 这个习称子集和变换的东西好像叫莫比乌斯变换? 那么这种变换就叫快速莫比乌斯变换 FMT? 大雾 开始推柿子 令UU表示全集 2n−12^n-1 fi,Sf_{i,S} 表示 ii 秒当前集合为 SS 的概率 gi,Sg_{i,S}为其莫比乌斯变换 gi,S=∑x⊆Sfi,xg_{i,S}=\sum_{x\subseteq S} f_{i,x} 这样 gi
2017-04-22 20:44:38 2959
原创 [矩阵快速幂 DP] BZOJ 4037 [HAOI2015]数字串拆分 & BZOJ 2323 [ZJOI2011]细胞
题解 把矩阵当做DP的值来转移 因为矩阵乘法满足结合律 分配律 然后大力DP就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;const i
2017-04-22 20:29:16 406
原创 [树形DP] BZOJ 4033 [HAOI2015]树上染色
关键是状态设计 fu,if_{u,i} 不止表示u子树内i个黑点 子树内同色点两两之间的答案 其实应该是u子树内i个黑点 子树内同色点两两之间的答案以及子树内点和子树外点的答案 因为黑白点的个数是确定的 所以很好转移#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long
2017-04-22 20:25:19 505
原创 [随便搞搞] TCO14 Round 2C InverseRMQ
随便搞搞咯 先按照值从小到大排序 然后值一样的一起处理 如果交为空 无解 如果交被之前所有的并给完全包含了 无解 如果某一时刻并的大小比数字还大 无解// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>#include<cst
2017-04-21 08:52:28 441
原创 [树形DP FWT] HDU 5909 Tree Cutting
给一个带点权的树 文有多少个连通子图的异或和为0~m-1 没什么好说吧 水题#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; re
2017-04-21 08:46:34 622
原创 [几何 LIS] BZOJ 3663 Crazy Rabbit & 4660 Crazy Rabbit & 4206 最大团
膜一发题解 问题转化为直线上有一些区间,选出尽量多的区间使得它们两两之间”相交但不包含” 考虑最终方案中选出来的所有区间中左端点最小的一个,因为区间两两之间有公共部分所以这个区间内必须包含其他所有区间的左端点.那么我们枚举这个左端点最小的区间,只把其他区间中左端点在这个区间内的区间拿出来,按左端点排序后对右端点跑LIS,就可以保证选出来的区间有公共部分而且不包含.复杂度为O(n2logn)
2017-04-21 08:24:04 587
原创 [分块 莫比乌斯反演] BZOJ 4815 [Cqoi2017]小Q的表格
那个神奇的关系式 其实是辗转相减的形式 稍微发现下就能知道 这其实是个一维的东西 fa,b=abgcd2(a,b)∗fgcd(a,b),gcd(a,b)f_{a,b}={ab\over gcd^2(a,b)}*f_{gcd(a,b),gcd(a,b)} 然后推一推就知道 ans=∑ni=1fi,i∗g(⌊ni⌋)ans=\sum_{i=1}^n f_{i,i}*g(\lfloor {n\ov
2017-04-21 08:20:27 579
原创 [几何] BZOJ 4814 [Cqoi2017]小Q的草稿
把三角形拆成三条线段 以每个点为中心 极角排序一发 然后扫描线 set中维护线段 优先级为到中心点的距离 因为三角形不相交 所以大小关系不会变 遇到一个点就查一下最近的线段是不是挡住了 不然就有贡献 其实三角形对于一个点 只有一条边是有用的#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#includ
2017-04-21 08:14:55 972
原创 [树形DP] BZOJ 4824 [Cqoi2017]老C的键盘
首先这是棵完全二叉树 直接fu,if_{u,i}表示u在子树u中排名i的方案数 然后合并就是两个排列合并咯 组合数乘一下 大于小于都差不多#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char b
2017-04-21 08:12:24 864
原创 [仙人掌同构 Hash] Codeforces Gym 100307 NEERC 13 C. Cactus Automorphisms
其实就是BZOJ3899的加强版 当时写的东西真是不敢恭维还是看Po姐的题解吧 我们把仙人掌拆成圆方树 就可以直接用树hash来做 先找重心 因为我写的时候把两个点也当做点双 那么所有边都是圆方相接如果重心有两个 去代表环的方点就好了 接下来是hash 圆点没问题 子树排完序hash 顺带记一下如果有相同 答案乘上出现次数的阶乘 不是根的方点 也就是一个环 是有顺序的 不能排序 然后看一
2017-04-20 07:34:46 916
原创 [组合数取模] BZOJ 4830 [Hnoi2017]抛硬币
习惯性交换aa和bb 令b≥ab\geq a 首先特判a=ba=b 这时答案为22a−Ca2a2{2^{2a}-C_{2a}^a}\over 2 其实就是所有情况减去平局的情况 剩下的不是A赢就是B赢 且是对称的 那么除以2 ∑Cin∗Cin=∑Cin∗Cn−in=Cn2n\sum C_n^i*C_n^i=\sum C_n^i*C_n^{n-i}=C_{2n}^n然后如果b>a 我们考
2017-04-20 07:20:55 2187 2
原创 [最小割] BZOJ 4823 [Cqoi2017]老C的方块
传送门#include<cstdio>#include<cstdlib>#include<algorithm>#include<map>#include<cstring>using namespace std;typedef pair<int,int> abcd;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;
2017-04-20 06:55:57 626
原创 [单调栈 扫描线] BZOJ 4826 [Hnoi2017]影魔
先用单调栈找出比ii大的第一个数lil_i 和 rir_i 然后[i,i+1][i,i+1]有p1的贡献 [li,ri][l_i,r_i]有p1的贡献 [li,x] x∈[i+1,ri−1][l_i,x] \ x\in [i+1,r_i-1] 有p2的贡献 [x,ri] x∈[li+1,i−1][x,r_i] \ x\in [l_i+1,i-1] 有p2的贡献 放在平面上就是点和线段 矩形求
2017-04-20 06:54:56 884
原创 [spaly模拟 线段树] BZOJ 4825 [Hnoi2017]单旋
发现旋最小值到根 最小值深度变为1 他的右子树深度不变 其他都加1 旋最大值类似 这个只要线段树就好了 怎么求子树 看他的father 插入操作 找出前驱和后继 一定是祖先子孙关系 新点往深度大的下面挂#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>using namespace std;inline ch
2017-04-20 06:50:48 1051
原创 [FFT] BZOJ 4827 [Hnoi2017]礼物
直接把∑ai+y−bi+x\sum a_i+y-b_{i+x}展开 只有∑ai∗bi+x\sum a_i*b_{i+x}比较难求 直接FFT就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static cha
2017-04-20 06:48:00 779
原创 [构造 随机乱搞] Codeforces Gym 100608 ASC 47 E. Elegant Square
这个题根本没思路 没想到就是乱搞 我们让每个点由三个质数组成 分别为ai,j∗bi,j∗ci,ja_{i,j}*b_{i,j}*c_{i,j} 然后我们取出前n个质数 放在A第一行 接下来每行由上一行位移一下 B和C同理 这样肯定保证了行列乘积一样 但是会有数字重复 遇到重复 xjb交换个几行 就好了 直到没有重复#include<cstdio>#include<cstdlib>#in
2017-04-18 21:30:10 650
原创 [交互 杂题] Codeforces Gym 100307 NEERC 13 I. Interactive Interception
如果已知起点 我们可以直接二分速度 现在我们都不知道 那么我们每次查询希望把起点和速度组成的二元组尽量平均的分开 这个要一个二分来找询问那个点 然后询问(0,R)就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<string>#include<iostream>using namespace std;
2017-04-18 21:25:16 608
原创 [最小割] SRM 590 div1 FoxAndCity
有一个n个点的无向无权图,一开始已经连有一些边。 记d(u)表示1号点到u的最短距离,每个点有个标号c(u) 你可以在图中新建一些边,使得sum (d(u)-c(u))^2尽量小。 n<=40比较经典的建模姿势有边相连意味着|d(u)-d(v)|<=1 于是可以每个点拆出一排点。S集表示False T集表示True 注意强制下 d1=0 和 di!=0,i>1// BEGIN CUT HE
2017-04-18 21:22:44 765
原创 [三分套三分] Codeforces Gym 100307 NEERC 13 E. Easy Geometry
首先矩形的宽度对答案是单峰的 固定宽度 左端点对最大面积也是单峰的 然后三分套三分就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef double ld;typedef pair<ld,ld> abcd;inline char nc(){ static char bu
2017-04-18 21:19:41 657
原创 [字典树 最小树形图] Codeforces Gym 100307 NEERC 13 D. Dictionary
先把所有串建成字典树 字典树上的边 边权为1 然后如果两个点 一个是另一个的后缀 那么就另一个向那一个连0的边 跑一通最小树形图就好了 我不会 拷了个板子 输出方案就很蛋疼了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;inline char nc(){
2017-04-18 21:17:47 654
原创 [杂题] Codeforces Gym 101190 NEERC 16 L. List of Primes
关键是一个函数Solve(int x,int *pre,int sum,int L) 表示已经考虑完了前x个质数 得到前缀pre 剩下需要的和为sum 下标从L开始 然后需要预处理下不用前x个质数 组成sum 的方案数和总长 然后超出范围的时候不处理 就能过了#include<cstdio>#include<cstdlib>#include<algorithm>using names
2017-04-17 09:45:21 850
原创 [杂题 交互] Codeforces Gym 101190 NEERC 16 I. Indiana Jones and the Uniform Cave
真是神题 其实递归的写是不难写的 我在昏昏欲睡的时候参考了别人的代码 写了手工栈非递归的 意识模糊#include<cstdio>#include<cstdlib>#include<algorithm>#include<stack>#include<string>#include<iostream>using namespace std;string ret;int tot;
2017-04-17 09:42:49 715
原创 [扫描线 线段树] Codeforces 720D Russian Code Cup 2016 - Finals D. Slalom
注意这里的本质不同的含义 是左边和右边的障碍集合不同 那么我们要考虑怎么去重 我们要求能向右走就向右走 也就是说我们考虑把所有向左上的角都折叠起来然后就可以扫描线加线段树了 我们遇到一个障碍 就把能爬上来的都统计到障碍上面的那格 注意能爬需要一些判断#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>usi
2017-04-17 09:38:34 574
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人