自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雯舞

Love three things int he world -- Manchery

  • 博客(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 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

原创 [构造] 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 746

原创 [杂题] 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 1022

原创 [博弈论] Codeforces Gym 101190 NEERC 16 G. Game on Graph

首先确定平局 当Bob先手的状态的一个后继被确定不是平局, 这个状态不是平局; 当Alice先手的某个状态的所有后继都不是平局, 这个状态不是平局. 初始所有出度为0的点不是平局,类似拓扑排序搜索到的状态都不是平局, 剩下的是平局. 然后确定不是平局状态下输赢 类似咯 后手都赢先手就输 后手能输先手就赢 但是这样能把所有状态推出来吗? 不能 因为Bob一旦能不平局宁愿输都不平局 比如这

2017-04-15 20:24:51 976

原创 [物理 杂题] 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 711

原创 [扫描线 杂题] 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 761

原创 [杂题] 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 872

原创 [边双连通分量 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 709

原创 [扫描线 线段树] 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 547

原创 [乱搞] 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 1072

原创 [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 659

原创 [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 1409

原创 [阈值] 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 428

原创 [二进制分组] 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 313

原创 [线段树] 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 926

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除