- 博客(56)
- 收藏
- 关注
原创 [CodeVS1343]蚱蜢 非旋转式Treap
非旋转式Treap代码请看周魏大爷blog http://blog.csdn.net/zawedx/article/details/54706561 一个写程序不需要if语句,外加变态压行的大爷听q神说用非旋转Treap写LCT多一个log?#include <iostream>#include <cstdio>#include <algorithm>#include <cassert>
2017-01-31 11:51:10 326 3
原创 [BZOJ4567][Scoi2016]背单词 字典树+贪心
后缀关系可以构成一棵树,这东西用字典树就能求那么等同于说需要把这棵树上的节点放到序列上,显然不可能把父亲放在儿子后面,n2n^2的代价大于任何一种按照dfs序放的代价显然放到序列上是按照dfs序来放的,这个推一推就推出来了 dfs优先走siz小的儿子(这个和树剖刚好相反),正确性显然(小学数学书好像有类似的结论)#include <iostream>#include <cstdio>#incl
2017-01-30 18:22:58 363
原创 [BZOJ4553][Tjoi2016&Heoi2016]序列 CDQ分治
令b[]为原序列,a[i]为修改过程中b[i]被修改到的历史最大值,c[i]为历史最小值 原题可转化为求最长的子序列,满足对于任意两项ii,jj,i<ji<j,b[i]<=c[j]b[i] <= c[j]且a[i]<=b[j]a[i]<=b[j] 这东西好像叫二维偏序,反正拿CDQ分治能求就是了 一维排序二维树状数组,因为树状数组已经有一个log了所以排序直接上快排也不会有很大影响#inclu
2017-01-30 18:15:19 454
原创 [BZOJ4552][Tjoi2016&Heoi2016]排序 二分答案+线段树
诶看到题目我以为是很神很神的数据结构,直接想放弃了 看到题解以后发现题目确实很神,不过并不是很强的数据结构,做法很巧很棒直接处理升序和降序是没法儿做的 二分答案x,将序列里面的所有元素分成大于x的和小于等于x的,分别用0,1表示,这样区间升序/降序就能转化成为区间赋值,线段树维护即可代码几乎没难度,可是考场里要想到这个解法可能不容易#include <iostream>#include <cs
2017-01-30 16:45:19 349
原创 [BZOJ4563][Haoi2016]放棋子 错排公式+高精度
诶我感觉我在刷水题啊#include <iostream>#include <cstdio>#define N 2050using namespace std;int n;struct num{ int d[N],w; void print() { for (int i=w;i>=1;i--) printf("%d",d[i]); printf("\n");
2017-01-30 15:38:25 485
原创 [GDKOI2016] Day2 染色大战 记忆化搜索
出题人讲这题的时候扯到了模拟退火,遗传算法,alphabeta剪枝等等 然而这题一个记忆化搜索就能跑过去#include <iostream>#include <cstdio>#define INF (1<<30)#define N 22using namespace std;int n,m,tp,e[N][N],map[N][N],v[N][N];int vis[2][1<<N];c
2017-01-29 16:30:12 338
原创 [GDKOI2016] Day2 QT与泰剧 数位dp
诶终于到博客第100篇了,值得纪念啊数位dp有很多种写法,大部分是记忆化搜索或者多一维表示是否受限制,我之前的写法一直是一遍普通dp+一遍普通搜索,虽然很好理解但是写起来很挫,这次尝试了一下多一维的做法(实际上我开了两个数组)F[i][p1][p2]F[i][p1][p2]表示第ii位(以个位为第一位),p1表示是否全部为质数,p2表示模3的余数。 特别注意处理前导零(我真是菜鸟在这里处理了好久,
2017-01-29 14:13:56 337
原创 [GDKOI2016] Day1 不稳定的传送门 结论
对每个点可以走的传送门排序算期望即可 对于任意两个可以走的传送门推一个偏序关系就可以了#include <iostream>#include <cstdio>#include <vector>#include <algorithm>#define N 200050#define INF 1<<30using namespace std;typedef double db;db F[N];
2017-01-27 23:33:30 391
原创 [GDKOI2016] Day1 魔卡少女 线段树
很久之前写的题,今天看到的一句话概括了这道题的精髓: xor的每一位具有独立性,分开维护即可10棵线段树+1e8+7,很好写很好过#include <iostream>#include <cstdio>#define N 2000050#define mod 100000007#define mid ( (l+r)>>1 )#define ls l,mid,(t<<1)#define rs
2017-01-27 23:16:28 690
原创 [POJ2976]Dropping tests 01分数规划
原来这就是01分数规划,以前听左老师讲过做了类似的题,结果并不知道这玩意儿的名字叫01分数规划,涨姿势了#include <iostream>#include <cstdio>#include <algorithm>#define eps 0.00000001#define N 1000050using namespace std;int n,k,a[N],b[N],e[N];doubl
2017-01-27 15:21:25 343
原创 [codeforces] 762C - Two strings 线段树
我想这题一定有不需要线段树的做法 但是比赛的时候时间紧迫也没有去想那么多觉得线段树可做直接上了考虑留下来的区间,一定是左边一段右边一段(也可以只有左边或右边),我们需要找最长的这么两段,且这两段和A串匹配的LCS不能有交集。线段树节点[l,r]值为y表示B串从左往右匹配LCS到A串的[l,r]区间,其中位置B串匹配到最长的长度为y,从左往右处理完之后再从右往左枚举B串长度和匹配到A串的位置,两者需
2017-01-26 19:27:15 609 3
原创 [codeforces] 501E - Misha and Palindrome Degree
分类大讨论即可若字符串本身就回文,区间可以任意取,否则,若区间[l,r]合法,那么[ll,rr]满足ll<=l且rr>=r的区间都合法,和[l,r]完全没有交集的区间不合法。那么一定能找到一个最小的区间必须被所有合法的区间包含,且包含它的皆为合法的区间,找出来就行了。#include <iostream>#include <cstdio>#include <cstring>#define N
2017-01-26 19:21:39 499
原创 [Codeforces goodbye2016] D. New Year and Fireworks
注意到棋盘大小很小,可以开棋盘大小*8的数组来记录所有的状态,重复的可以只记一个,每次扫一遍即可比赛的时候想到解法一阵乱敲一次就过了,真是狗屎运 比赛时写的代码,没想那么多也没有注重代码的美观#include <iostream>#include <cstdio>#include <cstring>using namespace std;int map[2][310][310][8];int
2017-01-26 18:10:50 427
原创 [Codeforces goodbye2016] E.New Year and Old Subsequence 线段树
诶这题卡了我大半天,换了一万种写法,重新定义了好多个数组 诶这篇题解写的相当垃圾,如果是想看做法请绕路其实主要恶心的是数字6,这玩意儿好多地方能放,也有好多地方不能放,重点对它讨论的思路是没错的。 总体上来说,这个东西不能放在”201”的后面,不管是在”7”的前面还是7的后面做法是线段树节点维护一堆值,分别表示匹配2017的第i-j位且不包含2016的至少删除的字符个数,还有接在左边第i位后面的
2017-01-26 18:07:27 671
原创 [BZOJ3721]PA2014 Final Bazarek 单调性
这题想起来挺简单的,两三分钟就出结论了,写起来也快,结果前几发提交用了I64d,卡了好久对于答案x,最后的决策一定是取奇数个奇数和任意个偶数组成的,为了使答案最大,当奇数的个数和偶数的个数确定时,我们取最大的若干个。将奇数取出来降序排序,将偶数取出来降序排序,倘若我们此时选择了p1的奇数,p2的偶数 若要增加奇数的个数,减少偶数的个数,就将p1+=2,p2-=2(维护总数奇数的性质),反复操作时候
2017-01-25 22:11:38 415 2
原创 [BZOJ4700]适者 CDQ分治
看到题目以后并没有第一时间想到cdq分治,看了很多篇题解都没有明白,后来自己yy出来了一个解法,应该是对的反正过了首先考虑若一个炮塔都没有被秒杀,那么怎么安排攻击顺序最好 对于两个炮塔u,v,若u在前那么v将多产生d[u]×a[v] d[u] \times a[v]的伤害,v在u前那么u将多产生d[v]×a[u] d[v] \timesa[u] ,显然我们要使伤害最小,即当u在v前时,满足d[u]
2017-01-25 15:29:55 939
原创 [BZOJ4710][Jsoi2011]分特产 容斥原理
直接容斥一发即可/************************************************************** Problem: 4710 User: di4CoveRy Language: C++ Result: Accepted Time:632 ms Memory:34144 kb****************
2017-01-24 23:18:55 486
原创 [51nod 1362]搬箱子 组合数公式
天呐51nod是不是特别喜欢卡常啊这题一直推公式推到复杂度足够低就可以了,感谢班上的数竞大爷毛公给我的指点 枚举一下斜向下的操作有多少次,令它为aa,令竖着走为bb,a+b=na+b=n总共有n+m-a次操作,其中有三种操作,可以很简单的得到答案 ans=∑mi=0∑na=0Can+m−aCbn+m−2a ans = \sum_{i=0}^m \sum_{a=0}^n C_{n+m-a}^aC_
2017-01-24 23:16:09 839
原创 [BZOJ4710][Jsoi2011]分特产 容斥原理
容斥一发即可#include <iostream>#include <cstdio>#define mod 1000000007#define N 2050using namespace std;typedef long long LL;LL C[N][N],F[N],ans;int n,m;int a[N];int main() { scanf("%d%d",&n,&m);
2017-01-24 09:31:58 313
原创 [BZOJ4551][Tjoi2016&Heoi2016]树 dfs序+线段树
维护一棵只有标记的线段树 标记为二元组(x,v)表示节点和深度 定义标记加法为取v较大的那个标记#include <iostream>#include <cstdio>#include <vector>#define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1 #define N 100050usi
2017-01-23 21:54:35 305
原创 [Codeforces734E]Anton and Tree 树的直径
好神的题 做法:对于每一条边E(u,v),若两点颜色相同那么边权为0,否则为1,输出树的直径/2上取整 证明: 边权为0相当于将两个点并成一个点,那么树上的点相当于已经进行了黑白染色,对于树的直径,至少需要树的直径/2,上取整,才能染成同一颜色,做法即对直径的中点染色即可#include <iostream>#include <cstdio>#include <cstring>#
2017-01-23 18:34:29 294
原创 [Codeforces343D] Water Tree 树链剖分
既然讲了这题,就写一写吧 直接剖,没啥好想的#include <iostream>#include <cstdio>#include <vector>#define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1#define N 500050using namespace std;int son[N]
2017-01-23 18:16:53 383
原创 [Bestcoder Round#91][HDU6012] Lotus and Horticulture 排序
诶还是fst了 这题虽然简单但是坑点挺多的 把温度当成一条扫描线扫过去,把每个植物的两种温度分开来,权值是a-b 排个序扫过去Notice: 1、注意处理温度相同的情况(我居然把温度相同的双关键字排序!) 2、注意边界,温度是任意实数,所以将左边界改成2*l,右边界改成2*r+1#include <iostream>#include <cstdio>#include <algorith
2017-01-23 13:39:07 299
原创 [BZOJ2657][Zjoi2012]旅游(journey) 树的直径
太神啦翻popoqqq博客才知道了解法 构图找直径即可/************************************************************** Problem: 2657 User: di4CoveRy Language: C++ Result: Accepted Time:2724 ms Memory:2130
2017-01-23 13:30:25 332
原创 [BZOJ4653][Noi2016]区间 线段树
将所有区间按li-ri排序,那么答案一定是一段连续的区间 有单调性,两个指针扫 一段区间是合法的当且仅当这个区间中存在一个点被超过m个区间覆盖 线段树维护区间最大值,支持区间加法操作即可 notice:l,r达到了1e9,需要离散化/************************************************************** Problem: 4653
2017-01-23 13:28:44 362
原创 [BZOJ4443][Scoi2015]小凸玩矩阵 二分法+二分图匹配
二分答案,把小于等于该答案的边加入二分图,判断匹配数是否大于等于n-k+1。#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <vector>#define INF 2147483647#define N 200500#define M 400050using namespace
2017-01-22 18:26:42 370
原创 [BZOJ2588]Spoj 10628. Count on a tree 可持久化线段树
离散化 对每个节点,用线段树表示该节点到根的路径上的值域 然后可持久化询问的时候查询u,v,LCA(u,v),fa[ LCA(u,v)]结点上的四棵线段树 做一做减法就好notice: 1、初始的权值已经超过了int,需要long long 2、最后一组询问的换行符不要输出!(我已经邮件了一发管理员希望他改题面)写起来很好写#include <iostream>#include <cst
2017-01-21 18:26:41 313
原创 [BZOJ3894]文理分科 最小割
诶兄弟我正在B站直播写博客建立网络流模型 对于每个学生, 原点连向他,容量为他选择文科的收益 他连向汇点,容量问他选择理科的收益 对于每个学生,再多创建两个附加点p1,p2, p1连向他周围的学生容量为INF,周围的学生连向他容量为INF答案=正权值和-最小割#include <iostream>#include <cstdio>#include <queue>#include <c
2017-01-21 16:24:28 402
原创 [BZOJ3997][TJOI2016]组合数学 平面图
平面图相关 从左下扫到右上即可#include <iostream>#include <cstdio>#include <cstring>#define N 1050using namespace std;typedef long long LL;int v[N][N],n,m;LL F[N][N];void ut(LL &x,LL y) { x = max(x,y); }int m
2017-01-20 21:29:55 394
原创 [POJ3177]Redundant Paths Tarjan求双连通分量
双连通分量缩点后重新构图,答案为叶子节点个数除以二,向上取整证明: 显然每个叶子节点至少至少需要连一条边出去,否则该节点被孤立,答案>=叶子节点个数/2,向上取整; 对于每一个叶子节点,寻找与他距离最远的一个叶子节点连边,反复操作直到没有孤立的叶子节点,这显然是一组合法解,故等号成立 证毕#include <iostream>#include <cstdio>#in
2017-01-20 20:46:38 327
原创 [玲珑杯#Round5]Grid Point 拉格朗日插值
答案为 g(n)=∑ni=0(2n+1)k−(2i+1)kg(n) = \sum_{i=0}^n(2n+1)^k-(2i+1)^k令这个k+1次多项式为f(x)f(x) 令s=k+1 根据拉格朗日插值公式 f(x)=∑si=0pi∗yi f(x) = \sum_{i=0}^s p_i*y_i 其中 pi=∏si=0(x−xi)∏si=0(xj−xi)p_i=\frac {\prod_{
2017-01-19 22:53:50 454
原创 [BZOJ1014][JSOI2008]火星人prefix
splay维护区间hash值,二分求lcp 大常数选手#include <iostream>#include <cstdio>#include <cstring>#define mod 100000007#define N 1000050#define eq 97LLusing namespace std;typedef long long LL;int siz[N],h[N],e[N]
2017-01-19 18:45:11 242
原创 [UOJ171][WC2016] 挑战NPC 一般图最大匹配
诶解法真巧 将一个篮子拆成三个点,且互相联通 对于所有的球x能放到篮子y,把球x向三个篮子拆的点连边若一个篮子里放进来的球数小于等于1,那么篮内部也会有一条匹配边#include <iostream>#include <cstdio>#include <cstring>#include <vector>#define N 2500using namespace std;int fa[N],
2017-01-18 21:42:36 260
原创 [UOJ79]一般图最大匹配
模板#include <iostream>#include <cstdio>#include <cstring>#include <vector>#define N 2500using namespace std;int fa[N],t,n,m;bool g[N][N];int gf(int x) { return fa[x] == x ? x : fa[x] = gf(fa[x]); }
2017-01-18 20:55:32 313
原创 [BZOJ1006]神奇的国度 弦图染色
诶弦图真是好玩把完美消除序列找出来令p[x]为x在完美消除序列中的位置对于完美消除序列里的一个元素u,任意与u有连边的v满足p[v]>p[u],u的颜色是所有颜色中不与任何一个v的颜色相同且编号最小的颜色最后统计一下最大的颜色标号输出即可找完美消除序列用的是最大势算法,O(n+m)每次找最大lable的点的时候我选择了用堆(感觉不是很优美,可能有不这么暴力的
2017-01-18 17:26:45 317
原创 [ZOJ1015]Fishing Net 弦图判断
最大势算法直接判断弦图#include #include #include #define N 2050using namespace std;int lab[N],vis[N],F[N][N],mark[N],tmp[N],cur;int n,m;void z() { for (int _=n;_>=1;_--) { memset(lab,0,sizeof(lab)
2017-01-18 16:00:09 441
原创 [BZOJ4722]由乃 结论+线段树
大神博客说的很好:http://blog.csdn.net/werkeytom_ftd/article/details/54429577细节不多注意一下就好#include #include #include #define mid ( (l + r) >> 1 )#define ls l,mid,t<<1#define rs mid+1,r,t<<1^1#define N
2017-01-17 23:50:43 373
原创 [BZOJ2730][HNOI2012]矿场搭建 Tarjan求割点
原本想补觉的,结果睡一会儿竞赛老师给了个电话,再一会儿肯德基宅急送给了一个电话,再过一会儿高一学弟来敲门干脆不睡了,起来打题嗯这题别往双联通分量去想,直接想割点会好想一点求出图里面所有的割点,割点可以将这个图分成若干个连通块特判一个连通块不存在割点,随便往里面扔两个出口即可,出口个数+2,方案数为随意选两个点的方案数siz * (siz - 1)对于任意
2017-01-17 21:00:22 248
原创 [BZOJ4355]Play with sequence 吉司机线段树
定义二元组标记(p,c)表示对区间内元素x x=max(x+p,c) x = \max{(x+p,c)} 标记支持区间加法 tag1<p1,c1>+tag2<p2,c2>=tag<p1+p2,max(c1+p2,c2)> tag1<p1,c1> + tag2<p2,c2> = tag<p1+p2,max(c1+p2,c2)> 那么标记就可以下推啦 覆盖操作可以表示成tag<−INF,c
2017-01-17 13:17:40 1200
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人