自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zx2003的博客

我可能快要遗忘了眼泪的滋味

  • 博客(135)
  • 收藏
  • 关注

原创 p3763DNA,倍增+hash

本来这题倒没什么,主要是我用倍增+hash+O2水到了洛谷rank1,可能是因为倍增hash的复杂度是O(log答案)O(log答案),而别的什么SA,二分hash都是O(logn)O(logn),谨以纪念。 似乎还有SAM的,然而O(n∗4)O(n*4)还是跑不过我#include<cstdio>#include<cstring> const int N=100100,mo=99824435

2017-08-14 23:31:17 289

原创 洛谷3816

这题很神奇。 一开始我读了很久才弄明白红黑树的定义。 然后觉得可能是个构造题,想了一个下午,感觉要很多特判。 又觉得可能是DP,状态是f[i][j]表示ii个节点且黑高为jj的红黑树的答案,有一个很显然的O(n2logn)O(n^2logn)算法,可惜要T。 我把转移的表打出来,以为f[i][j]肯定从二的幂次,或二的幂次减一转移而来,否则记从xx转移而来,那么似乎xx是不降的。 接着就是

2017-08-14 23:10:49 248

原创 P3590,大力随机化

刚看到到这题,在想是否可以二分答案,然而答案的可行性并不是单调的。 所以我设ll为当前答案可能的最小值,在(l,n](l,n]中随机一个数mm,再判定是否可行,若可行就l=m+1,否则不动,快要超时了就退出。 然后洛谷上居然AC了! 去bzoj上交一发,可能数据比较强,怎么调参也调不过。#include<cstdio>#include<ctime>const int N=2000005;

2017-08-10 15:12:44 291

原创 洛谷3863,时间与原始序列的转化

传送门 题解就不说了。 感觉官方题解3很妙,由此可以归纳出一个通用方法,以解决支持区间修改,单点查询历史中满足某个条件的个数这一类问题。 据说有黑魔法的(n+q)n√(n+q)\sqrt n的做法,但不如算法三+将块设为n√\sqrt n快?#include<cstdio>#include<cmath>#include<algorithm>using namespace std;con

2017-08-08 18:45:13 338

原创 UVAlive4490,状压DP的巧妙运用,注意边界

题解就不说了,网上到处是 我犯的错误有两个。第一个是强制第一个点选中,但实际上者是错的。然后大力对拍,拍了一万多组还没拍出来,然后眼调,发现最后求答案时,我是强制取出k本书,我觉得多取一定不必少取差,因为至少还可以放回去,但要是它的周围环境变了,直接放回去会变差,然后就错了。#include<cstdio>#include<cstring>const int N=155;int f[N][N

2017-08-08 18:37:41 923

原创 LibreOJ β Round #3

传送门 开场先开T1,感觉是TSP板子题,但这是完全图,然后就等价于对于一个任意的排列进行求解,这就转化成了序列问题,但这似乎没什么用。 突然灵机一动,觉得可以先将点权排序,将排序后相邻的元素之间的边纳入回路中。 但这样样例都过不去。 接着努力观察样例,想到了一个巧妙的构造,写了一发,交上去只有90分,特判了n==2的情况就AC了。 然后开T2,感觉每个点可以向自己的庇护所连一条有向边,然

2017-08-04 23:47:03 302

原创 洛谷3600,大力期望DP

传送门 这题从下午做到晚上,真是欲仙欲死。 题解区里有题解,就不说了,一开始有三个地方写挂。 1.把包含于被包含的关系想反了; 2.没有考虑一个元素不在任何询问里的情况 3.处理2问题我用的是排序,而且cmp是return l<x.l; 感觉我好菜啊。#include<cstdio>#include<cstring> #include<algorithm>typedef long

2017-08-03 20:16:39 285

原创 UOJ33树上GCD

传送门 官方题解 我写的是点分做法,一开始我是用memset(dp,0,(sizeof dp[0])*t)来清零dp数组的1到t位,但这样第t位刚好没覆盖到,然后就没过大样例。#include<cstdio>#include<cctype> #include<cstring>#include<cmath>typedef long long ll;const int N=400005;

2017-08-02 22:42:46 955

原创 bzoj1758重建计划,树的点分治+单调队列(可能是常见套路?)

传送门 似乎这题有很多种做法。 我的做法是, 先二分答案,然后再分治,这样,如果一开始就找到了路,就能很快返回。然而点分时找重心的常数比较大,我又是每次重新dfs,而不是再次利用前面的结果,然后就跑得很慢。 分治时,我是将每课子树,每个(不带权的)深度中取出(带权深度)最大的一个,组成一个数组,先求解,用双指针扫,再和前面的合并,处理时我按子树深度排了个序,从小到大处理,这样,每次合并时,操作

2017-08-02 16:20:40 220

原创 P3830 [SHOI2012]随机树

传送门 这题前两个子任务比较简单,对于询问nn,直接将最后扩展出来的点的深度,设为n−1n-1时的期望深度加一即可 后两个子任务,考虑原树的左子树有jj个节点,右子树有i−1−ji-1-j个节点,DP即可。注意DP时要用到两个变量最大值的期望值,所以状态要设为f[i][d]f[i][d]表示ii个节点的树深度为dd的概率,然后大力转移。 一开始想错了,以为max(a,b)max(a,b)的期望

2017-08-01 21:55:39 455

原创 P2824[heoi2016]排序,大力卡常

传送门 网上烂大街的O(nlog2n)O(nlog^2n)二分答案做法就不赘述了 洛谷题解区有一种新颖的O(nlogn)O(nlogn)做法,使用可分裂合并线段树(可能spaly也行,但常数岂不大得上天了?)保存原序列的有序区间片段,并利用“有序”的特点进行维护。 然而我刚看到这题时,第一反应是,既然值域那么小,直接桶排就行了,而且因为是排列,所以没有重复元素,所以可以用bool类型存,然后8

2017-07-26 13:01:42 615

原创 UOJ300吉夫特

传送门 我真是智障,明明知道Lucas定理,却不知道 (nm)≡1(modn)\binom{n}{m}\equiv 1\pmod n等价于(n2m2)∗(n模2的余数m模2的余数)≡1(modn)\binom{\frac{n}{2}}{\frac{m}{2}}*\binom{n模2的余数}{m模2的余数}\equiv 1\pmod n 然后(n模2的余数m模2的余数)\binom{n模2的余数

2017-07-21 19:56:12 351

原创 UVALive3514,Cactus

这题我的想法是,对于连通图,求出点双之后,数一下每个 点双里的边数是否等于点数,就可以知道是否是仙人掌。然后将所有点数大于2的点双,ans∗=size+1ans*=size+1 一开始求成边双了,感觉自己好智障#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <ctime>#inc

2017-07-18 13:04:41 377 1

原创 UOJ220,NOI2016网格

这题细节很多啊,一开始没想通,浪费了很久。 总的来说,我是先对n∗m≤5∗104n*m\le5*10^4的数据暴力建图处理,然后对于大数据,答案必定大于等于0,先把所有蛐蛐形成的八连通块找出来,用并查集判断这些蛐蛐周围的跳蚤是否四联通,这样,就可以知道答案是否为0。如果不为0,再将每一个蛐蛐周围5*5范围内的跳蚤取出来建图,看看每个连通分量是否有割点即可。注意点数可达2.2∗1062.2*10^6

2017-07-18 10:32:25 629

原创 bzoj4174,大力推导

传送门 原式=∑Nn=1∑Mm=1∑mk=1n∗k−n+xm\sum_{n=1}^N \sum_{m=1}^M \sum_{k=1}^m \frac{n*k-n+x}{m} =∑Nn=1∑Mm=1∑mk=1(n∗(k−1)+x−(n∗(k−1)+x)(modm))/m\sum_{n=1}^N \sum_{m=1}^M \sum_{k=1}^m (n*(k-1)+x-(n*(k-1)+x)\pm

2017-07-17 14:18:23 507

原创 CF827D,巧妙的图(树)论题

官方题解是有的,但没有给出具体实现。 首先,我们用kruskal+并查集求出MST 假设点x和y之间是非树边,我一开始想用tarjan+带权并查集求出lca(x,y)lca(x,y),以及x到y路径上的边权最值。 然后,暴力将x到y的之间的树边的答案赋成x和y之间的边权,为了保证每个点均摊只赋一次值,我们可以使用并查集来维护一个点到最远的赋过值的祖先。 注意非树边要从小到大处理。 如果真是

2017-07-13 15:48:57 366

原创 CF414E,splay维护括号序列,码农题

传送门 刚看到这题一脸懵逼,尝试抄题解,死活看不懂。百度别人的中文题解,提到说因为子树移动,所以要用splay维护括号序列。 一棵有根树的括号序列定义我也找不到,脑补了一下,可能是对一个点x,进入时,序列尾部插入1,记下lxl_x等于这个1的位置,离开时,序列尾部插入-1,记下rxr_x等于这个1的位置,然后一个点到根的经过的点数就是前缀和。 强行yy一波后,发现两个点x,y如果不是祖先关系,

2017-07-12 18:56:20 478

原创 CF603E,multiset的使用要点

传送门 官方有题解,这里就不赘述了。 不过没有仔细看关于一个联通块当且仅当有偶数个点时能满足存在边集的一个子集每个点度数为奇数的证明(英语太烂),自行脑补了一下,可能必要性是因为有奇数个点的联通块,若每个点的度数均为奇数,则所有点的度数之和仍为奇数,然而显然在一个联通块中,所有点度数之和为偶数,矛盾。 一开始这题带着板子,很快就码完,然后死活debug不出来,最后发现,我使用的multiset

2017-07-10 18:08:22 234

原创 CF816E,奇技淫巧的复杂度分析

传送门 这题作为E题考场上我想了会,然后觉得D题可以找规律更可做,规律找到一半C题被hack了,事后A题fst,C题发现是一个字符打错了,我太菜了 这题利用了求反函数这一常见的技巧,可是我并没有第一时刻就反应过来。 然后,这题用了些奇技淫巧的复杂度分析->题解,其证明大意是考虑根节点xx,子树大小为nn,有kk个大小均为n/kn/k的儿子,其转移代价就是O(k(k−1)2∗(nk)2)O(\f

2017-07-08 16:29:58 398 2

原创 codevs1951,sdoi2013森林,启发式合并好题

一开始我没看出来这能启发式合并,看了题解才知道。 然后就是码码码,写完后死活A不掉,这是我的WA代码#include<bits/stdc++.h>using namespace std; typedef unsigned int ui;inline int getint(){ int x=0; char c=getchar(); while(!isdigit(c))c

2017-07-07 16:11:14 220

原创 bzoj3489,可持久化树套树

从前听说过树套树,也听说过可持久化,今天第一次把两个东西合在一起写。 对于这题,实际上可以转为三维偏序,对于每个元素,可以转化为空间中的一个点(prei,nxti,ipre_i,nxt_i,i),然后对于询问l,rl,r,求满足prei<lpre_i\lt l nxti>rnxt_i\gt r l≤i≥rl \le i \ge r的ii中,aia_i最大的一个即可 然后将preipre_i排

2017-07-06 15:59:05 398

原创 洛谷3702,递推+矩阵乘法优化

传送门 这题一开始想出来了一个二元一次递推式,有点麻烦。 一看题解,发现可以转为求全集和答案的补集,挺妙的。 一开始筛素数的数组只开到10610^6,RE两个点,开到5∗1065*10^6就AC了,感觉很玄学,毕竟值域m≤2∗107m\le2*10^7#include<bits/stdc++.h>using namespace std;typedef long long ll;const

2017-07-05 19:12:47 541

原创 Codechef Arithmetic Progressions ,分块FFT

题解网上到处都是,就不说了。 一开始块内暴力时忘了把桶清零,并且没有随下标移动更新桶内的值 然后FFT部分我一开始是这么写的ans+=(ll)(h[a[j]<<1]+0.5);光荣地爆int了 调了下块的大小,因为FFT常数大,所以块多一点会快一些 最后1090ms(本机对于随机数据要6s多,感觉codechef的机子很强啊),似乎比卡常大爷xehoth的0.64s慢到不知哪里去。#incl

2017-07-05 15:55:17 343

原创 洛谷3261,可并堆打标记

这题网上题解到处都是。 但有一个关键处void dfs(int x,int fa){ dep[x]=dep[fa]+1; for(int i=h[x];i;i=e[i].next){ int y=e[i].to; dfs(y,x); r[x]=merge(r[x],r[y]); } while(r[x] && a[r

2017-07-03 19:17:02 222

原创 POJ2887

这题我一开始复制模板,用的是指针式splay,微调了一下就交了,发现poj坏了(submmited failed) 今天一看,发现WA了,原来是insert到右子树时忘记把期望插入的位置减去左儿子的size+1左儿子的size+1,改完后T了 百度题解,发现别人都用块状链表,这不科学啊,lognlogn怎么可能比n√\sqrt n慢这么多(本机测试得耗时至少多一倍),看来splay常数太大 改

2017-07-03 16:38:17 346

原创 CF822E,巧妙的字符串DP

传送门 考场上强攻了42分钟终究以失败告终早。知这样就早点去抢hack了,我的房间里T3有个后来fst的,赛场上我看出其问题所在,结果我的hack一直格式错误,气都气死了再给我30s就好了。 这题感觉很巧妙,像我这种蒟蒻只想出题解中给出的第一种DP。但出题人却用了点特技(自己看看题解就知道了),目瞪口呆.jpg,真是妙不可言啊#include<bits/stdc++.h>typedef lon

2017-07-03 14:48:43 869 2

原创 UVA1579,俄罗斯套娃

中午被毛毛虫蛰了一下,现在右手只剩食指和中指能打字了,好不爽。 对于这题,我是先把套娃们分成几组,每组套成一个。计算时枚举分组方式,并从左往右贪心得到每组并成一个套娃的操作数(是的,就是贪心,虽然这是一道DP题)#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_polic

2017-07-02 14:32:39 752

原创 UVA10271,佳佳的筷子

传送门 首先把筷子长度排个序,可以证明配对的三根筷子中,一定最短的两根一定长度相邻(这就是红皮书上所谓的猜想吗?),然后乱搞一下就好了。 一开始数组小了,RE了一发。#include<bits/stdc++.h>const int N=5010;typedef long long ll;const ll inf=1ll<<60;int T,n,k,i,j,s;ll f[N][N],a[

2017-07-02 14:28:28 1110

原创 UVALIVE4394,区间DP好题

终于自己独立做出并1A了(印象中上次uva/uvalive中独立做出并一遍AC已经是去年10月了),刚才数了一下,到目前为止,整个vjudge上我总共交过559份代码,但只AC了109题,其中还有不少是用的别人的代码(确认对拍所用的代码的正确性) 传送门 题意可以看下蓝皮书,这里就不赘述了。 一开始我看到n≤100n\le100,在想根据上一篇博客,究竟是几维DP呢? 然后我努力想,大概花了

2017-07-01 20:30:30 238

原创 cf150D,作为div1D简单了点

传送门 题目大意 删长度为xx的回文串 会有得分axa_x 删完拼在一起 问最大得分 一开始看着题目,在想是几维DP。觉得可以用f[i][j]f[i][j]表示从ii到jj删完的收益,然后有两种情况:1.最外层构成回文串;2.由f[i][k]f[i][k]和f[k+1][j]f[k+1][j]并在一起得到。这样我得到了一个3维DP。 一般来说,k维DP都是nkk!\frac{n^k}{k!}

2017-07-01 19:00:38 332

原创 洛谷3810三维偏序模板题,树套树

传送门 这道题不强制在线,本来可以用cdq分治,bitset,kd_tree什么的乱搞,但是我刚好有封装过的treap模板,BIT模板,和两个组合起来的动态二维数点模板,不用白不用。 如何用BIT套treap动态二维数点?首先,用树状数组维护第一维,接着,对于树状数组的每个节点,维护一颗平衡树,然后就好了,代码还比较简洁的,如果手写treap的话,也就142行吧。 如果不怕常数,还可以用pb_

2017-06-24 23:24:30 953

原创 洛谷3761,TJOI2017城市

这道题一开始在想可以枚举每个点对,尝试删除其间的边,因为有O(n2)O(n^2)个点对,所以要O(1)O(1)更新答案 后来发现,因为是树,所以只有O(n)O(n)个点对是有用的(这么显然的结论一开始没发现,看来还是我太弱了),然后就可以每次O(n)O(n)判断 首先定义在一棵树xx中,对于点yy,F(x,y)F(x,y)等于以yy为根的有根树,(带权)深度最大的点的深度 对于一条边连接的两颗

2017-06-19 12:55:44 473 1

原创 洛谷3760,异或和

一开始看到这题,n只到10510^5,在想能不能暴力卡常一波艹过去,最后本地死活要跑1.6s,要是机子快点-1s?就好了。 然后我太菜了,死活做不出,百度出了个题解,挺好的。#include<cstdio>#include<cctype>inline int getint(){ int x=0; char c=getchar(); while(!isdigit(c))c

2017-06-13 22:01:27 323

原创 Bigger Arrays(hackerrank 101hack49 D)

这场比赛是在深夜进行的,我战斗力不佳,AC了ABC,看了看这题,感觉做不出,信息不会维护,就去睡了。今天找出当时的草稿纸,发现维护的信息虽然有点麻烦,但似乎满足结合律,果断线段树。 最后单次合并复杂度是O(logn)O(logn),n为区间长度,因为要快速幂,所以总的复杂度是O(nlog2n)O(nlog^2n),而且我为了省事,打完标记后统计信息时,强行pushdown,而不是手动计算,所以常数

2017-06-10 19:50:05 273

原创 一道传递闭包题

省选时孙耀峰大爷讲过传递闭包相关问题,没想到竟然遇上了。 传送门 这题其实可以用孙耀峰大爷论文中“不完全动态传递闭包”,但利用题目中的一些性质会更好。 我一开始的想法是,先将原图scc缩点,对于每一个操作时刻结束后,整个图一定是DAG套树,用静态传递闭包+动态树相关理论即可。因为只有加点,所以可以倍增。 但我们注意到,对于一个询问,如果当前答案为假,那么之后答案也不会为真,因为只有加点,对于

2017-06-10 17:32:41 1353

原创 codevs2403喵星球上的点名

这题我一开始想用后缀数组,并用主席树平衡树差分倍增等各种手段优化(数据结构学傻.jpg),写了一会儿觉得很不靠谱,一百度,傻眼了,竟然直接后缀数组+暴力就行了。 (下面的这份代码只能在codevs上AC,别的地方很可能会T)#include <algorithm>#include <set>#include <cstring>#include <cstdio>#include <cctyp

2017-06-10 11:42:25 275

原创 CF Round 418(div2) E题解

官方题解 官方题解的不完全翻译? 这题一开始想了个O(n6)O(n^6)的DP,f[i][j][k][a][b]f[i][j][k][a][b]表示从j到k到首都距离为i,且上一段有a个1和b个2剩下。但时空应该都过不去,本来妄图靠多项式自带小常数卡一卡,写到一半发现越写越虚,都开始怀疑这个DP的正确性了,然后去抄题解。 最后我写的是O(n5)O(n^5)的DP,手打1+6+12行转移,竟然只

2017-06-09 21:42:04 351

原创 CF Round 418爆零记

这场CF是我第一次failed system test并爆零,悔不当初,手速太慢。 开场看T1,一眼秒好题,然后我在判新加入的数是否能维持原序列有序时直接if(a[x-1]

2017-05-17 20:48:14 368

原创 UOJ192最强跳蚤

这题一开始想出来了一个用字典树维护的O(w−−√+n∗π(w−−√))O({\sqrt w}+n*\pi({\sqrt w})),并用字典树维护,的方法,感觉常数爆炸。看了题解后感觉这题有点字符串题的味道,我的字典树被换成了hash,但是单1亿多次取模就会T吧(取模那么慢),于是心里不平衡,不小心把本校学长qlj给hack了。 后来发现,09年骗分导论上写的

2017-05-13 17:34:16 657

原创 洛谷3765总统选举暨洛谷5月月赛R1B题

传送门 这题我考场上花了大量时间思考与打代码,最后应该是4小时得到70分(乐多赛制罚成57分),太浪费了,一定是因为我太弱了。 我已开始的想法是对于每个询问区间,在区间里随机选很多次数,统计一下每个数的出现次数是否满足条件即可。但是,随机数不是很稳定,万一区间长度10000,有5100个1,4900个2,然后发现100次随机,有49次是2,51次是1,不就gg了? 于是,我决定,每次询问随机A

2017-05-10 22:01:53 415

空空如也

空空如也

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

TA关注的人

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