- 博客(34)
- 收藏
- 关注
原创 【bzoj4065】Graphic Madness
CERC2012的(非超级大水题)最后一题了…… 这题没点智商似乎真的不会做呢…… 就是求一个特殊图的哈密顿回路,只是这个图由两棵树构成,两棵树之间的叶子节点数相等且一一有连边。 一开始我想,是否某个点的度数大于某个值之后就一定无解呢 然后我构造了一个模型把这个想法否掉了。 但是换一个姿势,如果是和叶子节点链接的个数呢? 注意到每个叶子节点的度数为2,这意味着经过
2015-11-26 22:25:11 984
原创 2012 Asia Tianjin Regional Contest - No Place to Hide
物理题!!!excited!!!虽然不是最擅长的…… 题意:有一个动点,速度为V0V_0,可以以各个方向前进(前进后方向不变),问最少选多少个别的点,使得不论这个动点往哪个方向转都会被碰到。 唔一开始太天真了列了个不知道多少元的二次方程……又仔细观察了之后发现其实可以套余弦定理。 设doctor所在的点为A,现在有一个interpol从点B出发以速度ViV_i追doctor。设他们
2015-11-25 22:24:10 2041
原创 【bzoj3157】 【bzoj3516】 国王奇遇记 && 国王奇遇记加强版
求∑mi=1immi\sum_{i=1}^{m}i^{m}m^{i}。 目前想到的做法是m2lognm^2\log n的,不知道可不可以分治什么的继续简化复杂度。 这个式子里比较难处理的是imi^m这一项,于是尝试用做差法消掉点什么。 m∑mi=1immi−∑mi=1immi\ \ \ \ m\sum_{i=1}^{m}i^{m}m^{i}-\sum_{i=1}^{m}i^
2015-11-25 17:37:06 1010
原创 【bzoj3155】Preprefix Sum
这题目名字挺有意思= = SSt=∑ti=1ai∗i=∑ti=1ai∗(n−i+1)−(n−t)∑ti=1aiSS_{t}=\sum_{i=1}^{t}a_{i}*i=\sum_{i=1}^{t}a_{i}*(n-i+1)-(n-t)\sum_{i=1}^{t}a_{i} 维护两个前缀和,∑(n−i+1)ai\sum (n-i+1)a_{i}和∑ai\sum a_{i},然后直接查询、
2015-11-24 22:16:11 1340
原创 【bzoj2982】combination
Lucas定理裸题。 设L(n,m)L(n,m)为模mod意义下的组合数。 则L(n,m)=L(n / mod,m / mod)∗(n%mod)∗(m%mod)%modL(n,m)=L(n\ /\ mod,m\ /\ mod)*(n \% mod)*(m\%mod)\%mod,其中/为整除符号,%为取模符号。 预处理出阶乘的模和阶乘的模的逆,直接计算。#include <bits/stdc++
2015-11-24 21:24:12 619
原创 【bzoj3223】文艺平衡树
splay,没什么好说的 尼玛记得kth的时候也要push啊!!! T_T#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)#define lc ch[u][0]#define rc ch[
2015-11-23 21:14:09 850
原创 2012 Asia Tianjin Regional Contest - Mahjong
要是noip前做过这种题的话……起码心里还有点地呢…… 然而…… 物是人非了啊…… 不过呢,这题相对于斗地主而言还是简单了很多。开个表,记录出现次数,直接爆搜判断就可以过了。 #include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,
2015-11-22 20:55:30 1464
原创 【bzoj3123】 [Sdoi2013]森林
被教做人啦T_T 维护树上的主席树。 查询u,vu,v,那么对应的当前版本是u,vu,v,前驱版本是lca(u,v),fa[lca(u,v)]lca(u,v),fa[lca(u,v)]。 连u,vu,v,因为保证是一棵树,于是启发式暴力合并,每次重新建主席树。 时间复杂度O(Tlog2n)O(T\log^2 n)。 几个要注意的地方。 第一个读入的testcase
2015-11-20 23:51:32 799
原创 【bzoj1878】[SDOI2009]HH的项链
莫队裸题。#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a,_=b;i<=_;i++)#define per(i,a,b) for(int i=a,_=b;i>=_;i--)#define maxn 50007#define maxm 200007inline int rd() { char c = getchar();
2015-11-20 23:45:18 947
原创 【bzoj2733】 [HNOI2012] 永无乡
sb题 合并:并查集+线段树启发式合并,注意动态开点 查询:直接查对应线段树的K大。 时间复杂度O(qlog2n)O(q\log^2 n)#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a,_=b;i<=_;i++)#define per(i,a,b) for(int i=a,_=b;i>=
2015-11-20 23:43:56 738
原创 【bzoj4061】[Cerc2012]Farm and factory
这题不错 反正我想了一天是没想出来hhhh 后来看了糖老师的题解 恍然大悟 设dis[i][j],dis′[i][j]dis[i][j],dis'[i][j]分别为原图和新图中i到j的最短路径。 设新加的一个点为x 若要使在新图中最短路不经过x,应要满足 ∀u,dis′[u][x]>=max{∣dis[u][1]−dis′[x][1]∣,∣dis[u][2]−di
2015-11-19 22:17:11 1550
原创 【bzoj2683】 【bzoj1176】 分治
将询问排序后按x轴分治。 这个题解的程序似乎是错的? http://blog.csdn.net/wzq_QwQ/article/details/46998215#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i
2015-11-19 21:15:13 915
原创 【bzoj4241】历史研究
这题也是坑了好久>_< 之前whx带我刷JOI的时候本来应该要做的。。。可是太懒没有写。。。 区间询问加权众数。 分块,预处理出块和块之间的答案,记录到第i个块数字x出现了多少次。然后查询的时候和普通众数基本一样,就是乘了个权值而已。 要离散化。 时间复杂度O(nlogn+mn√)O(n\log n+m\sqrt n) 。 昨晚写的常数太烂了。。。用了st
2015-11-19 15:43:52 940
原创 【bzoj2724】[Violet 6]蒲公英
坑了好久的区间众数…… 思路是分块。 设块的大小为ll,有xx个块 预处理第i个块和第j个块之间的众数和出现次数,这是O(xn)O(xn)的。 对于每个询问[l,r][l,r],如果l和r在同一个块里面,就暴力查询,这是O(l)O(l)的;如果不在同一个块,则先以预处理的信息得到中间连续的块的答案,然后再在最两边的两个块暴力查询每个数在中间出现的次数,然后更新答案。偷懒没多想
2015-11-18 20:39:02 1200
原创 【bzoj4060】[Cerc2012]Word equations 字符串
其实这题是字符串处理加一个勉强算得上DP的东西? 显然图是个拓扑图,后先标好号,然后DP 设f[u][i]f[u][i]表示第i个特殊符号从目标字符串的第i位开始匹配直到这个位置失配。 那么有很显然的转移f[u][i]=f[rc[u]][ f[lc[u]][i] ]f[u][i]=f[rc[u]][\ f[lc[u]][i]\ ],然后边界的时候暴力匹配。 有一些小细节,注意
2015-11-18 16:25:43 1097
原创 【bzoj4057】[Cerc2012]Kingdoms
闷声大爆搜就好。 状压判重。 时间O(n2n)O(n2^n) 。#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#define per(i,a,b) for(int i=a;i>=b;i--)#define shl(x) (1 << (x))inline int rd() { char c =
2015-11-17 22:12:05 1337
原创 【bzoj4058】[Cerc2012]Who wants to live forever?
手算出奇迹!(雾 如果只看异或的话,会发现当n为偶数时到第某个次数时会被翻转过来,然后再过某个次数就会被翻转回去,也就是说会循环。然后每一次都会有一个单数位和一个单数位是单独的,因此若要为0,则只能所有数为0。故n为偶数时除非全为0,否则一定LIVES。 又因为奇偶位数是独立的,手画表的时候也会发现奇数位和偶数位的奇偶数位本质上也是独立的(这个可以从异或的个数看出来),于是就可以分治。
2015-11-17 21:06:46 984
原创 【bzoj4062】[Cerc2012]Jewel heist
我真是哔狗了。。。 在路上yy出一个主席树的做法。。。然而似乎很麻烦。。。 结果一到机房就很坚定地把程序敲完了。。。 样例过了。。。 交一发诶怎么WA了。。。 改了几个觉得可能边界错了的地方。。。 继续WA。。。于是乎对拍。。。 然!后!发!现!有个地方不能直接求。。。要求的话得两个log而且代码量又会大一些。。。。 弃疗了一会。。。QAQ 后来
2015-11-16 21:32:43 1452
原创 2012 Asia Tianjin Regional Contest - Queue Sequence
坑爹splay 很裸就是了 记录每个数正数和负数的节点编号 insert p,先插正数,设正数前面有x个正数,然后插到第x+1个负数前面。注意有边界问题,机智的我加了个+0和-0 query p,直接split查 remove p,直接提前驱后继然后删 另外要用一个可以动态维护最小值的东西来维护insert的数。 怕被卡常,手写了个线段树。其实平板电视也不是
2015-11-15 22:09:03 1275
原创 【bzoj4064】[Cerc2012]The Dragon and the knights
1A真是excited(雾 似乎这题就是个乱搞吧 所有的直线不重合不共点,那么每加一条直线,总的区域数就加上这条直线和之前多少条直线相交再加1。如果把在同一个区域内的点看做一个点集,则就是判断点集的个数是否等于总的区域数。 于是重点就转成了判断有哪些点在同一个区域内,换句话说,在同一个区域内的点,都是在某些直线的同侧。注意到这点就好办了,如果把每个点都和原点连一条线段,则每个点在直
2015-11-13 20:21:52 760
原创 2012 Asia Tianjin Regional Contest - str2int
煎熬的一个晚上。 最后还是忍着,A了这题。 似乎已经完全没有动力了。 I’ve lost almost everything. 回到这题来吧 实际上就是要统计所有不同的字符串子串的和。 建一个SAM,每两个字符串之间插个间隔符,拓扑排序完从root顺着每条边往下走统计答案。注意一开始不能走前导零。 时间复杂度是线性的。#include <bits/stdc++.
2015-11-12 22:06:59 1072
原创 【bzoj4059】[Cerc2012]Non-boring sequences
这题暴力的复杂度是对的!!!感觉这题A得比较奇怪。。。 首先有一个很直接的想法是,对于一个点i,它所在的单独区间是[prei,nxti][pre_i,nxt_i],那么它将对[prei,i−1][pre_i,i-1]与[i+1,nxti][i+1,nxt_i]的点的答案产生影响。如果把每个产生影响 的区间看做一个点,那么每个点i的影响就可以看做一个矩阵。
2015-11-12 13:32:51 1580
原创 【挖坑】 2012 Asia Tianjin Regional Contest
中大参与出题的区域赛。 可怕的mmm系列又出现了QAQ 进度:8/11 卡题了QAQAQQQ
2015-11-11 21:29:05 954
原创 2012 Asia Tianjin Regional Contest - Sum of divisors 暴力
闷声大暴力= =。 数据范围特别小,所以直接O(n√)O(\sqrt n)搞出所有n的约数,然后一个个转进制慢慢判。 时间复杂度大概是O(Tn√logmn)O(T\sqrt n \log_{m}n)。 或许可以加强一下。 2333333#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)#defi
2015-11-11 21:23:00 785
原创 2012 Asia Tianjin Regional Contest - charge-station 贪心
注意到对于如果要在第i个城市建oil station,那么他的费用一定会比前面1~i-1个城市都建oil station的费用高。这就可以用来贪心,如果前i-1个城市全部建oil station就已经满足条件了,那么第i个城市就不用建。 于是就从后往前枚举一下,然后跑个spfa什么的判断一下是否成立即可。 时间复杂度O(n3)O(n^3)。 写spfa居然写错了什么鬼啊!!!重写了
2015-11-11 21:00:51 1107
原创 2012 Asia Tianjin Regional Contest - locker 暴力DP
设f[i][j][k]f[i][j][k]表示前i位已经匹配完,目前第i+1位为j,第i+2位为k的最小值。 则可以由第i位推到第i+1位的状态,若令t为j到tar[i+1]的步数,则 f[i][j][k]+t→f[i+1][k+p][num[i+3]+q]f[i][j][k]+t\rightarrow f[i+1][k+p][num[i+3]+q],其中q<=p<=tq<=p<=t,正
2015-11-10 21:55:24 1347
原创 论NOIP2015我是如何滚粗的
这次是主场作战呢。 NOIP也是第一次在二高举办的吧。 教练对具体的细节也不是十分了解,编程软件都是我下载的,环境也算是我设置的吧。秉着能替代emacs的心态,顺带装上了sublime2。或许也是导致rp–的原因呢。day 0 发了条说说。还什么”wait for good news”?早就应该是可以知道结果的吧。还记得,“wait for your advice”的时候,心里面就已经忐忑不安
2015-11-09 20:09:50 1435
原创 【bzoj4319】cerc2008 Suffix reconstruction
zkj大爷带我刷bzoj~这题应该有很多解 考虑sa的计算方式,然后贪心。 如果当前sa的下一位的rank大于下个sa的下一位的rank,那么下一位sa的字母应该比当前大,否则相同。 ZBY:“可以证明这是对的” 2333#include <cstdio>#include <cctype>#define rep(i,a,b) for(int i=a;i<=b;i++)#define m
2015-11-05 16:48:47 1102 3
原创 【bzoj4321】queue2
DP,状态想了很久……设f[i][j][0..1]f[i][j][0..1]表示前i个沙茶有j对是相邻的,其中第i个沙茶和第i-1个沙茶相不相邻。 先考虑第i个沙茶和第i-1个沙茶相邻,f[i][j][1]f[i][j][1]。现在第i个沙茶是新插入进去的,他的插♂入直接导致了他和第i-1个沙茶牵手了(雾),他可以牵第i个沙茶的左手或右手。如果原本第i-1个沙茶和第i-2个沙茶是牵手的,而当前这个
2015-11-05 15:27:21 1834 1
原创 【bzoj4305】数列的GCD
拿来练练基础的组合数学思维还是可以的实际上题目可以转化成:给一个序列A,修改其中的K个成为序列B,对∀i∈[1,m]\forall i\in [1,m]求出使得序列B满足gcd{x∣x∈B}==igcd\{x\mid x\in B\}==i的方案数。既然每个i都要check一次,那就看看对于某个i怎么计算答案fif_{i}好了。 首先注意注意到,对于{x∣x∈A&&i∤x}\{x\mid x\in
2015-11-03 21:45:08 1617 1
原创 【bzoj4300】绝世好题
绝世傻题= =既然要求bi and bi=−1≠0b_{i}\ and\ b _{i=-1}\neq0,那么就让他一定成立咯。 从1到n枚举,当前数为x,前面的数都操作完了,那么 fx=max{gi∣x第i位为1}+1f_{x}=max\{g_{i}\mid x第i位为1\}+1,然后再更新一下gig_{i}没了= =淦。。。一开始写了发trie。。。写完才发现根本不对啊TAT好虚啊老是犯这种错
2015-11-02 21:25:39 708 1
原创 【bzoj4151】 [AMPPZ2014]The Cave
不错的题,想了挺久的。不妨把点1设为根节点。 对于每个限制,到达ai→bia_{i}\rightarrow b_{i}这条路径的距离一定不大于某个数,在根节点确定的情况下,第i个限制的距离最大就是max{0,dist[ai]+dist[bi]−di2}max\{ 0,\frac{dist[a_i]+dist[b_i]-d_i}{2}\}以内,其中dist表示该点到根节点的距离。 这就可以转化成类
2015-11-02 19:22:35 1821
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人