- 博客(978)
- 资源 (2)
- 收藏
- 关注
原创 [几何 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 918
原创 [组合数取模] 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 2190 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 629
原创 [单调栈 扫描线] 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 886
原创 [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 780
原创 [构造 随机乱搞] 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 766
原创 [三分套三分] 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 658
原创 [字典树 最小树形图] 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 655
原创 [杂题] 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 854
原创 [杂题 交互] 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
原创 [构造] Codeforces Gym 101190 NEERC 16 C. Cactus Construction
我们递归地搞 使得包含点P的某个仙人掌被构造出来且除了P是1其他都是2 然后就是拆桥边或拆环 递归下去 然后在合起来就行了 把桥边接起来很显然 环的话 自己画画也不难搞出来了吧#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<set>#define pb push_backusin
2017-04-15 20:30:27 747
原创 [杂题] Codeforces Gym 101190 NEERC 16 K. Kids Designing Kids
其实就是三个图异或起来为空 要的就是个观察 after moving the figures, some two of these three freckles must be in the same point. There are only three possible shifts, check them all#include<cstdio>#include<cstdlib>
2017-04-15 20:26:50 1023
原创 [博弈论] Codeforces Gym 101190 NEERC 16 G. Game on Graph
首先确定平局 当Bob先手的状态的一个后继被确定不是平局, 这个状态不是平局; 当Alice先手的某个状态的所有后继都不是平局, 这个状态不是平局. 初始所有出度为0的点不是平局,类似拓扑排序搜索到的状态都不是平局, 剩下的是平局. 然后确定不是平局状态下输赢 类似咯 后手都赢先手就输 后手能输先手就赢 但是这样能把所有状态推出来吗? 不能 因为Bob一旦能不平局宁愿输都不平局 比如这
2017-04-15 20:24:51 977
原创 [物理 杂题] Codeforces Gym 101190 NEERC 16 J. Jenga Boom
纯模拟#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==p2&&(p2=(p1=buf)+fread(buf,
2017-04-15 20:17:26 714
原创 [扫描线 杂题] Codeforces Gym 101190 NEERC 16 E. Expect to Wait
智商越来越捉急 看图就知道了 答案就是阴影的面积 扫描线一波就好了#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
2017-04-15 20:15:13 762
原创 [杂题] Codeforces 627F 8VC Venture Cup 2016 - Final Round F. Island Puzzle
题目大意 有一棵n+1个点树 在上面玩n数码 问是否有解 最小步数 否则问加一条边是否有解 最小步数这个好像WC的T1啊? 根据当时考场上玩出来的经验 一棵树直接跑整条路径就好了 环套树是先移动到环上,然后绕着环走若干圈,最后再走向目的地。我们先当做树跑一通 然后看一下所有不在自己的目标位置的宝石是否可以添一条边组成一个环。如果不能组成,答案就是-1 怎么看 所有不在自己的目标位置
2017-04-15 20:11:30 764
原创 [链表 杂题] BZOJ 4432 [Cerc2015]Greenhouse Growth
只有我觉得神题吗 比C难度还大? 看懂了也不会写 不会告诉你我是看着标程写的#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#define pb push_backusing namespace std;inline char nc(){ static char buf[10000
2017-04-13 17:51:05 873
原创 [边双连通分量 Hash] BZOJ 4435 [Cerc2015]Juice Junctions
是不是只有我以为这是最小割树裸题 然后SB地大力分治跑最小割因为一个点度数不超过3 那么答案就是 0 1 2 3 先不在一个连通块的是0 在一个连通块但不在同一个边双里的是1然后怎么分辨 2 和 3 为2当且仅当存在删去某一条边 两个点不在同一个点双里 为3 也就是两个点所在的点双完全一样 我们尝试删除每条边 然后hash一下就好了#include<cstdio>#include<cst
2017-04-13 17:45:04 646
原创 [杂题] BZOJ 4437 [Cerc2015]Looping Labyrinth
三种情况分别对应bfs提前结束(n,0)(n,0)且(0,m)(0,m)都可达存在(kn,km)(kn,km)可达这题TM卡常啊#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef pair<int,int> abcd;typedef long long ll;inline c
2017-04-13 17:35:18 710
原创 [扫描线 线段树] BZOJ 4422 [Cerc2015]Cow Confinement
好题 但是懒得写题解 最近特别懒#include<cstdio>#include<cstdlib>#include<algorithm>#include<set>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+frea
2017-04-13 17:27:45 586
原创 [并查集 杂题] BZOJ 4452 [Cerc2015]Export Estimate
关键就是一个观察 怎么判断是个环 在维护并查集的时候顺便维护下size和度数为2的点的size#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&
2017-04-13 17:14:40 548
原创 [乱搞] BZOJ 4434 [Cerc2015]Ice Igloos
#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;double r[505][505];double A,B,C;double K,L;int Count(int x,int y1,int y2){ int ret=0; for (int y=y1;y<=y
2017-04-13 17:12:33 510
原创 [乱搞] BZOJ 4436 [Cerc2015]Kernel Knights
大概类似拓扑排序 找入度为0的点 然后删 最后剩下偶环 任选一边就好了#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-13 17:09:05 381
原创 [FFT || 递推] BZOJ 4451 [Cerc2015]Frightful Formula
f1,if_{1,i} 的贡献是 f1,i∗an−i∗bn−1∗Cn−i2n−i−2f_{1,i}*a^{n-i}*b^{n-1}*C_{2n-i-2}^{n-i} fi,1f_{i,1} 同理 注意 f1,1f_{1,1} 没什么卵用 然后 cc 还有贡献 c∑i=2n∑j=2nan−i∗bn−j∗Cn−i2n−i−j=c∑i=0n−2∑j=0n−2ai∗bj∗Cii+jc\sum_{i=2}
2017-04-13 17:07:16 871
原创 [dsu on tree 主席树优化建图 最大流] BZOJ 3681 Arietta
这显然是个类似二分图匹配 但直接跑网络流边数承受不了 我们采用套路 用数据结构优化建图 类似vfk的a+b problem我们处理子树问题 有一种方法是按dfs序建主席树 然后就可以用减法取出一段区间 也就是子树的信息 但是在某些情况下不能减 比如在这个网络流里 这样的话 我们就要用一种科技 dsu on tree 相关资料 原文 神犇翻译版本大概意思是 我们用重链剖分的思想 当前子树的
2017-04-10 22:39:20 1073
原创 [meet in middle 矩阵树定理 容斥原理] SRM 551 div1 SweetFruits
集训队论文传送门大概就是我们先用meet in middle求出有恰好k个真甜的方案数 然后我们求这些东西的生成树个数 乘在一起的和就是答案 我们让真甜连真甜 真甜连不甜 假甜连不甜 不甜连不甜 跑一发矩阵树定理 这样只能保证这些真甜的某个子集是真甜 那么我们需要用 0~k-1 的简单容斥一下// BEGIN CUT HERE #include<conio.h>#include<sstr
2017-04-10 22:14:32 662
原创 [Trick] 一般图最大匹配的随机匹配
写不出带花树的时候还是可以考虑下骗分的 但是这是可以卡的 一般图最大匹配的随机匹配hack法 在UOJ上已经被hack烂了具体做法 代码很清晰#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<cstring>#include<ctime>#define cl(x) memset(x
2017-04-10 22:08:48 1411
原创 [阈值] SPOJ RECTANGL - Rectangles
详见 一类算法复合的方法大概就是把坐标都离散了 按照某x坐标上的点数分类 如果矩形的某边是大类 只有O(n√)O(\sqrt n) 直接枚举所有点按 y hash就行了 否则所有小类 把所有能构成的线段放进hash表 只有O(nn√)O(n\sqrt n)再一次体验了unordered_map的感人速度#include<cstdio>#include<cstdlib>#include<al
2017-04-10 22:05:22 434
原创 [二进制分组] BZOJ 4140 共点圆加强版
其实做法是跟离线一模一样的 只不过强制在线 可以使用二进制分组这个技巧 详见xhr论文 跑的比分治快是smg 一天到晚做数据结构的傻逼选手#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<cmath>#define pb push_backusing namespace st
2017-04-09 20:54:44 655
原创 [主席树] BZOJ 4571 [Scoi2016]美味
要是没有加 就是裸的可持久化字典树 其实字典树也就是线段树 按位贪心 然后在主席树上查一下某段是否有数字#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==
2017-04-09 20:51:13 314
原创 [线段树] BZOJ 4388 JOI2012 invitation
最近真的懒 Claris的题解#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<queue>#define pb push_backusing namespace std;typedef long long ll;inline char nc(){ static char buf
2017-04-09 20:45:32 361
原创 [FWT] BZOJ 4589 Hard Nim
FWT相关 Fast Walsh-Hadamard Transform (快速沃尔什变换)#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const int P=1e9+7;const int Inv=(P+1)>>1;inline ll Pow(ll
2017-04-09 20:42:02 927
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人