- 博客(48)
- 资源 (2)
- 收藏
- 关注
原创 [DP套DP] UOJ #141 【UER #4】量子态的棋盘
预先DP一遍则每个格子最多留一个球,然后对轮廓线的状态装压 如果定义一个点的状态数不超过SS 那么据题解说SS大概是5×1055\times 10^5 复杂度O(nmS)O(nmS) 接下来是卡常时刻 我先是把轮廓线上的球数转化成一个80进制数 然后和当前已经入袋的球数hash在一起 hashmap里面存一下 成功rnk1 开心#include<cstdio>#include<cstdl
2017-05-31 20:26:48 1017
原创 [DP套DP] SRM 591 div1 StringPath
记录f(i,j)是不是A/B的前缀,需要保留前m个dp值 其实就是轮廓线 复杂度O(nm∗4m)O(nm*4^{m})// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>#include<cstring>#include<cmat
2017-05-31 20:22:52 397
原创 [DP套DP] BZOJ 3864 Hero meet devil
我们令fi,jf_{i,j}表示TiT_i和SjS_j的LCS 然后我们发现 fi,j−fi,j−1∈[0,1]f_{i,j}-f_{i,j-1} \in [0,1] 这个东西可以状压 预处理所有转移 然后DP#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(
2017-05-31 20:20:15 433
原创 [分块] BZOJ 4908 [BeiJing2017]开车
我们在车的地方加一 在加油站减一 这样答案就是一个类似绝对值的区间和的东西 这个东西不好搞 分块 对于整块加减 我们在块上再维护一个表示0的指针 对于小块 暴力基数排序重构 复杂度O(nn√)O(n\sqrt n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#define pb push_bac
2017-05-31 20:17:41 1049
原创 [Floyd 一般图最小权完美匹配] 算法马拉松25 F River?Rever!
首先把一个区间翻转的最小代价肯定不是题目给出的那个代价 我们先跑一通floyd就能搞出来最小代价 然后呢 把所有奇偶性变化的位置 连成一个完全图 跑最小权完美匹配就好了 不会带花树 拷了个随机匹配的板子#include<bits/stdc++.h>using namespace std;typedef long long ll;namespace Work{ const ll OO=1
2017-05-31 08:47:30 2811 1
原创 [搜索 剪枝] 算法马拉松25 E BigPrime
减掉所有只有小质数的数的个数就好了 大概就那么几千万个 首先包含大于根号b的质数只能有一个你可以直接算出来 然后再搜 怎么写都能三四秒出 然后你还要些剪枝 我是把大于三次根号b的质数瞎讨论一波 因为最多出现两个#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>using namespace std;
2017-05-31 08:38:30 431
原创 [期望与方差 Lucas定理] 算法马拉松25 D 小Q的集合
大概是 ∑Cin∗2∗ik∗(ik−(n−i)k)modm\sum C_n^i*2*i^k*(i^k-(n-i)^k) \bmod m 后面那个东西模mm有循环节 同一组的组合数的和用lucas定理也能化成组合数乘上2的幂#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace
2017-05-31 08:36:12 817
原创 [二进制分组 线段树 || 点分治 分治] UOJ #191 【集训队互测2016】Unknown
详见lzz的集训队论文二进制分组做法二进制分组是在线段树的结构上做的 方便区间查询 至于删除 采用延迟重构的思想 每一层只有最后一个区间是萎的 我们需要递归下去 询问还是O(logn)O(\log n)个节点 重构复杂度势能分析下O(nlogn)O(n\log n) 只有上凸包是有效的 合并的时候采用归并加Graham可以做到O(n)O(n) 不然以我的常数 T的血惨 但是卡内存 只有90分#
2017-05-28 11:15:45 3460
原创 [历史最值问题] UOJ #164 【清华集训2015】V
详见吉丽的集训队论文吧我们发现修改操作可以变为这样一个形式S:x=max(x+A,B)S:x=max(x+A,B) 这个标记是可以合并的 就可以求当前值了 现在还要历史最值 我们就再加一个标记SSSS表示历史最大的标记 因为这个形式是一条折线 所以历史最大也是可以合并的 具体的我们两段时间有两对标记S,SSS,SS和s,sss,ss 时间先后分别对应pushdown时的父亲儿子关系 我们发现
2017-05-28 11:06:13 597
原创 [Segment tree Beats! || 分块] Codeforces 793F Tinkoff Challenge - Elimination Round F. Julia the snail
我们用fif_i表示左边界是ii的答案 一条线段[a,b][a,b]对答案的影响是 f1f_1到flf_l中大于等于aa的都跟bb取max 这个可以用线段树科技做 复杂度证明跟区间最值操作的势能分析应该差不多#include<cstdio>#include<cstdlib>#include<algorithm>#include<cassert>using namespace std;inl
2017-05-28 10:59:49 1210
原创 [扫描线 二分图最大匹配 线段树优化网络流] Codeforces 793G Tinkoff Challenge - Elimination Round G. Oleg and chess
这个我们首先可以转化成一个二分图最大匹配的模型 但是肯定跑不出 首先扫描线 把free的格子剖成O(n)O(n)个矩形 对两边都建成线段树 每个矩形对应两边各O(logn)O(\log n)个点 两两相连 总边数O(nlog2n)O(n\log^2n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstrin
2017-05-28 10:50:50 1048
原创 [杂题 背包DP] Codeforces 793E Tinkoff Challenge - Elimination Round E. Problem of offices
因为都经过根 那么只要考虑根的那么些子树就好了 然后要求 a-b之间是n/2个点 c-d之间是n/2个点 四个点的顺序是 a-c-b-d 或 a-d-b-c 那么背包做一下就好了 If solution of both knapsacks exists, then answer is «YES», otherwise «NO». We can always order items fro
2017-05-28 10:45:45 651
原创 [杂题] Codeforces 739D Round #381 (Div. 1) D. Recover a functional graph
Let’s think what has to hold after we put numbers in place of question marks: number of vertices with precycle = 0 and cycle = y should be divisible by y. if there exists a vertex with pr
2017-05-28 10:42:20 562
原创 [DP 平衡树] Codeforces 809D Round #415 (Div. 1) D. Hitchhiking in the Baltic States
考虑求lis的过程 fif_i表示长度为ii的递增子序列最末尾一项的最小值 这个东西是单调递增的 每次在序列后加入一个数 就更新下相应的一个位置 现在变成加入的数可以是一个区间内 那么我们发现会对一段产生影响 平衡树维护下就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline c
2017-05-23 21:32:59 723
原创 [数位DP] Codeforces 809C Round #415 (Div. 1) C. Find a car
这个东西就是(x−1) xor (y−1)+1(x-1) \ \text {xor} \ (y-1)+1 然后转化为 ∑i∑j[i xor j≤k]\sum_i\sum_j [i \ \text {xor} \ j \leq k]和∑i∑j[i xor j≤k]∗(i xor j)\sum_i\sum_j [i \ \text {xor} \ j \leq k]*(i \ \text {xor}
2017-05-23 21:29:10 1234
原创 [二分 交互] Codeforces 809B Round #415 (Div. 1) B. Glad to see you!
二分+交互 四个字够了吧#include<cstdio>#include<cstdlib>#include<algorithm>#include<iostream>#include<string>using namespace std;inline bool query(int x,int y){ printf("1 %d %d\n",x,y); fflush(stdout); s
2017-05-23 21:26:17 1167
原创 [构造] Codeforces 804E Round #411 (Div. 1) E. The same permutation
打表发现4是可以做到不变的 然后我们四个划为一块 两块之间16下也是可以不变的 具体 const int xx[]={ 1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4 }; const int yy[]={ 1,2,3,4,2,1,4,3,3,4,1,2,4,3,2,1 };这样相当于第一个四下 相当于会把两边对调 然后每个数x
2017-05-23 21:24:23 460
原创 [树的直径] Codeforces 804D Round #411 (Div. 1) D. Expected diameter of a tree
这个只要知道两个子树连在一起的直径端点必然是各自直径的端点就好了 然后瞎枚举一通 只要知道∑i∑jmin{sizei,sizej},∑isizei=n\sum_i\sum_j min\{size_i,size_j\} ,\sum_i size_i=n是O(nn√)O(n\sqrt n)的就好了#include<cstdio>#include<cstdlib>#include<algorith
2017-05-23 21:19:56 469
原创 [构造] Codeforces Gym 100553 NEERC 14 E. Epic Win!
一道神奇的题 题目大意给你一个剪刀石头布自动机 然后让你构造一个剪刀石头布自动机克制他 这个我们先构造出一个完全针对他的自动机WW 无用的边我们先当他undefined 然后我们开始枚举起点一起跑 用双方所在节点(x,y)(x,y)表示状态 当前状态的转移遍不存在时 我们就把这条边连向WW的一个副本的对应节点 如果成环了 那么一定是在一个WW的副本里成环 这个环是一直赢的 因为只有WW副本之
2017-05-23 21:16:14 921
原创 [线段树] Codeforces 794F Round #414 F. Leha and security system
线段树的简单应用?#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)+frea
2017-05-23 21:10:33 494
原创 [博弈 杂题] Codeforces 794E Round #414 E. Choosing Carrot
这个题 首先我们要知道结论If n is even, the answer is while if n ≥ 3 is odd, the answer is . (If n = 1 then the answer is obviously a1.) 为什么呢 证明看题解然后可以动kk步就是所有长为n−kn-k子区间的答案的最大值#include<cstdio>#include<cstdlib>#
2017-05-23 21:09:26 1027
原创 [杂题] Codeforces 794D Round #414 D. Labelling Cities
可以证明有相同邻接节点集合的点染色必相同 否则必不相同 缩点 然后一个点度不超过2且连通 然后就是一条链或环 环肯定不可能 然后就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<map>#include<set>#include<vector>#define pb push_backusing names
2017-05-23 21:02:20 491
原创 [数论] 2017 计蒜之道 初赛 第一场 阿里天池的新任务
我们令子串Ss,tS_{s,t}对应的wsw_s为这个子串的bb 因为互质 所以bb是互不相同的 转为求有几个bb满足条件 然后每一位看作一个限制 把所有限制离散化取交即可 注意处理奇偶性 还有一个细节 s≤n−m+1s \leq n-m+1 我们还要倒着把最后m−1m-1个bb中合法的减掉#include<cstdio>#include<cstdlib>#include<cstring>
2017-05-23 20:59:07 354
原创 [随机 Hash] Codeforces 799F Round #413 F. Beautiful fountains rows
就是给题目中给出的每个区间随一个值 然后判断一个区间是否合法 把区间内所有数xor和 再xor上 区间中出现过的所有数的xor和 为 0 前缀和统计下 本人脸黑 单hash交了好几发都是WA 迫不得已双hash#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>#include<map>#include
2017-05-20 07:29:01 870
原创 [杂题] Codeforces 799E Round #413 E. Aquarium decoration
枚举下选了几个ab都喜欢的 没什么难度 就是细节贼多#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&&
2017-05-20 07:25:39 693
原创 [线段树 杂题] Codeforces 806E VK Cup 2017 Round 3 E. Blog Post Rating
这个我们发现排好序后跑答案是最大的 然后就是维护一个支持插入的序列 我本来想把权值相同的压成一段 然后就gg 出门左转神犇学弟博客#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;
2017-05-20 07:23:18 632
原创 [最短路 杂题] Codeforces 806D VK Cup 2017 Round 3 D. Perishable Roads
我们把所有边权都减去最小值 然后发现 肯定是一条链然后下面挂着一条0边 然后挂着一整颗子树 子树中贡献都是0 那么我们要最小化那条链 我们发现这条链上如果有连续的权值为 0⋯a,b,c,d⋯且b>c0\cdots a,b,c,d\cdots \text 且 b>c 那么我们把a,ba,b换成一条边答案不会更劣 唯一不行的就是bb就是链头没有边 之后的边必然是递增的 这样就可以做一个最短路了#i
2017-05-20 07:20:54 721
原创 [二进制分组 dsu on tree 二次函数] Codechef KILLER Painting Tree
首先我们可以列一个dp 按深度 fuf_u表示链剖分中选择了从uu到当前深度的祖先这条链所能得到的最小答案 我们发现这条链的贡献是一个关于祖先深度二次函数 具体形式我忘了 而其他贡献则是一路上来兄弟子树中的最大值累加 这样就很明确了 是要求对每一个点维护一个二次函数 还要资瓷子树加 查询子树中x=kx=k最小值首先询问一坨二次函数最大值 有一个经典做法来自 BZOJ2646 我们可以维护nn
2017-05-19 21:20:12 526
原创 [长链剖分] BZOJ 1758 [Wc2010]重建计划
关于长链剖分 两个应用 O(n)O(n) 统计每个点子树中可合并的以深度为下标的信息经过一些预处理,单次O(1)O(1)在线查询一个点的kk级祖先这题二分答案后就是求长度在区间内的最长链 然后就记录下某个深度的最大dis 长链剖分加线段树 维护 O(nlog2n)O(n\log ^2n) 从轻儿子合并来的时候顺便更新答案竟然比点分慢#include<cstdio>#include<cst
2017-05-19 21:08:21 1066
原创 [DP] BZOJ 4897 [Thu Summer Camp2016]成绩单
骗一波访问 出门右转 #include<cstdio>#include<cstdlib> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=b
2017-05-19 21:04:46 759
原创 [TravelNotes] CTSC 2017 & APIO 2017 & THUPC 2017 游记
Pre自从省选完了之后整个人恍恍惚惚的 居则忽忽若有所亡出则不知所如往 做做题也没什么前途 唯一印象深的就是两题 一是BZOJ上的项链分赃 一是IBM这个月的题 发现了Ponder This这个脑洞题新天地之后 决定以后多做做这里的题 除了做题外 就是入了do2的坑 争取成为电竞社一员 练了练拍拍熊 沉浸于暴力美学之中 约了阿爷在北京开开开05/06一大早出发 一路上没什么事 看了看BZOJ
2017-05-12 19:31:09 3580
原创 [最短路 杂题] BZOJ 4356 Ceoi2014 Wall
具体看题解 我说不清楚 首先可以证明 这个环必然包裹住了所有左上角到其他城市的最短路 证明可以调整为包进去 而不会边劣 然后求出所有最短路 然后把它们包进去的话 把一个交点拆成四个点 然后跑一下左上角绕一圈到左上角的最短路#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<que
2017-05-06 07:09:18 1278
原创 [BEST定理 矩阵树定理] BZOJ 3659 Which Dreamed It
BEST theorem 一个证明?注意区分下题目中要求的“欧拉回路”的条数和定理中欧拉回路的条数 欧拉回路是个回路 所以存在循环同构 题中要求起点是1 实际上还要乘上1的度数 因为从1的任一边出发在题中都算作一种不同方案#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef lon
2017-05-06 07:04:50 1669
原创 [树链剖分] BZOJ 4811 [Ynoi2017]由乃的OJ
怎么这么眼熟 BZOJ 2908 又是nand? 复杂度?O(64∗nlog2n)O(64*n\log^2n) 吃不消吧 然后发现我写的是假题解 什么三十二颗线段树 明明可以压位在一起orz 维护上面说的这个东西并不需要64*2个bool变量,而是可以压到两个unsigned long long里,分别代表每一位输入为0和每一位输入为1。 将两个合并:若输入为0,经过左变量后某些bi
2017-05-05 08:51:54 519
原创 [杂题 神证明] BZOJ 4893 项链分赃
这个题的证明有点妙啊 结论是 切得刀数不超过颜色数先扯那个地球问题 二维的情况也就是在圆周上 因为两者互换位置 两条图线必定有交点 就证完了 三维 在球面上 我们固定一维转动 看做无数个圆周 都可以找出两点气压一样 又因为函数连续 那么这两点的移动也是连续的 这样就锁定了一维必定相等 也就把问题压低了一维 也就是跟上面同理然后这有什么用呢 这其实是跟两种颜色对应的问题是等价的 首先在这个题里离
2017-05-05 08:45:26 1506
原创 [有向图树形图计数] BZOJ 4894 天赋
根本不知道题面在讲什么 矩阵树定理有向图版本 邻接矩阵还是邻接矩阵 度数矩阵根据是出度还是入度分别计算内向树和外向树#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;const int N=305;const int P=1e9+7;int n;cha
2017-05-05 08:35:34 1394
原创 [线段树] BZOJ 4821 [Sdoi2017]相关分析
拆开柿子之后 发现要维护 ∑xi\sum x_i,∑yi\sum y_i,∑x2i\sum x_i^2,∑xi∗yi\sum x_i*y_i 直接线段树就好了 两个标记合并的时候要注意下 一种可以覆盖另一种 似乎神犇有更短更快的方法? #include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;type
2017-05-05 08:30:24 405
原创 [莫队 bitset] BZOJ 4810 [Ynoi2017]由乃的玉米田
本来还以为有什么高超的卷积技巧 就是莫队 + - 直接位移然后&下 至于乘 枚举所有因数吧#include<cstdio>#include<cstdlib>#include<algorithm>#include<cmath>#include<bitset>using namespace std;inline char nc(){ static char buf[100000],
2017-05-05 08:27:08 366
原创 [高斯消元 概率 KMP] BZOJ 4820 [Sdoi2017]硬币游戏
一个直观的想法 是建AC自动机 然后消元 但是这样变量个数是O(nm)O(nm) 然后我就不会做了 概率题都好妙啊 一个精妙的设计是再定义一个状态N 表示当前串不包含任何人的概率 举个例子 来自这里 例如: A=TTH, B=HTT 那么N+TTH一定会到终止点,但不一定TTH加完后才停止 NTTH = A + BH + BTH 0.125N = A + 0.75B
2017-05-04 08:00:13 1098
原创 [DP two-pointers 杂题] BZOJ 4828 [Hnoi2017]大佬
首先补血和其他操作不影响 其他操作在哪些天做也没有丝毫影响 那么我们可以DP出最多能有几天不补血也就是能空出来淦大佬的时间D 然后我们bfs一通发现 状态数不超过1000w? 假设我们已经求出了 t和f表示 我们花t时间能够蓄力并且放一个大 造成f的伤害 两次大能够淦死大佬的条件是 D−t1−t2≥C−f1−f2D-t_1-t_2\ge C-f_1-f_2 且 f1+f2≤Cf_1+f_2
2017-05-04 07:52:23 661
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人