- 博客(135)
- 收藏
- 关注
原创 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 1418
原创 【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 782
原创 【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 928
原创 【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 724
原创 【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 1507
原创 【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 901
原创 【bzoj4241】历史研究
这题也是坑了好久>_< 之前whx带我刷JOI的时候本来应该要做的。。。可是太懒没有写。。。 区间询问加权众数。 分块,预处理出块和块之间的答案,记录到第i个块数字x出现了多少次。然后查询的时候和普通众数基本一样,就是乘了个权值而已。 要离散化。 时间复杂度O(nlogn+mn√)O(n\log n+m\sqrt n) 。 昨晚写的常数太烂了。。。用了st
2015-11-19 15:43:52 919
原创 【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 1180
原创 【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 1055
原创 【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 1301
原创 【bzoj4058】[Cerc2012]Who wants to live forever?
手算出奇迹!(雾 如果只看异或的话,会发现当n为偶数时到第某个次数时会被翻转过来,然后再过某个次数就会被翻转回去,也就是说会循环。然后每一次都会有一个单数位和一个单数位是单独的,因此若要为0,则只能所有数为0。故n为偶数时除非全为0,否则一定LIVES。 又因为奇偶位数是独立的,手画表的时候也会发现奇数位和偶数位的奇偶数位本质上也是独立的(这个可以从异或的个数看出来),于是就可以分治。
2015-11-17 21:06:46 966
原创 【bzoj4062】[Cerc2012]Jewel heist
我真是哔狗了。。。 在路上yy出一个主席树的做法。。。然而似乎很麻烦。。。 结果一到机房就很坚定地把程序敲完了。。。 样例过了。。。 交一发诶怎么WA了。。。 改了几个觉得可能边界错了的地方。。。 继续WA。。。于是乎对拍。。。 然!后!发!现!有个地方不能直接求。。。要求的话得两个log而且代码量又会大一些。。。。 弃疗了一会。。。QAQ 后来
2015-11-16 21:32:43 1400
原创 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 1236
原创 【bzoj4064】[Cerc2012]The Dragon and the knights
1A真是excited(雾 似乎这题就是个乱搞吧 所有的直线不重合不共点,那么每加一条直线,总的区域数就加上这条直线和之前多少条直线相交再加1。如果把在同一个区域内的点看做一个点集,则就是判断点集的个数是否等于总的区域数。 于是重点就转成了判断有哪些点在同一个区域内,换句话说,在同一个区域内的点,都是在某些直线的同侧。注意到这点就好办了,如果把每个点都和原点连一条线段,则每个点在直
2015-11-13 20:21:52 709
原创 2012 Asia Tianjin Regional Contest - str2int
煎熬的一个晚上。 最后还是忍着,A了这题。 似乎已经完全没有动力了。 I’ve lost almost everything. 回到这题来吧 实际上就是要统计所有不同的字符串子串的和。 建一个SAM,每两个字符串之间插个间隔符,拓扑排序完从root顺着每条边往下走统计答案。注意一开始不能走前导零。 时间复杂度是线性的。#include <bits/stdc++.
2015-11-12 22:06:59 1033
原创 【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 1514
原创 【挖坑】 2012 Asia Tianjin Regional Contest
中大参与出题的区域赛。 可怕的mmm系列又出现了QAQ 进度:8/11 卡题了QAQAQQQ
2015-11-11 21:29:05 934
原创 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 737
原创 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 1067
原创 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 1321
原创 论NOIP2015我是如何滚粗的
这次是主场作战呢。 NOIP也是第一次在二高举办的吧。 教练对具体的细节也不是十分了解,编程软件都是我下载的,环境也算是我设置的吧。秉着能替代emacs的心态,顺带装上了sublime2。或许也是导致rp–的原因呢。day 0 发了条说说。还什么”wait for good news”?早就应该是可以知道结果的吧。还记得,“wait for your advice”的时候,心里面就已经忐忑不安
2015-11-09 20:09:50 1417
原创 【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 1065 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 1781 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 1578 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 693 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 1767
原创 【bzoj4149】[AMPPZ2014]Global Warming
一开始以为一个单调队列就搞定了。。。后来发现好像根本不是那么一回事QAQ参考了一下claris的题解>.< http://www.cnblogs.com/clrs97/p/4582835.html首先要求出每个点的最大值区间和最小值区间,然后可以得到答案区间之间的不等关系,再枚举左端点,根据不等式在线段树里面查询。#include <bits/stdc++.h>using namespace s
2015-10-29 15:33:32 1886
原创 【GDOI2007】不公平的比赛
题目大意:有A,B两个序列,序列中每个正整数的值大小不超过100,A的数列可形成一个环,求三个奇怪的东西(大雾),具体什么东西嘛,咳咳。我的做法:用SAM建后缀树,逐个求a[i]和b[1]的LCP,累计答案。#include <bits/stdc++.h>using namespace std;#define rep(i,a,b) for(int i=a;i<=b;i++)#define pe
2015-10-22 21:16:08 1183
原创 机房的秋
别人的一年之计在于春,而我的却始于秋。 作为一个成天扎头于题海的竞赛生,秋之伊始,意味着新的竞赛季又要开始了。而这已是我窝在机房的第二个秋。 去年此时,当夕阳收起映射到班门口的最后一抹余辉,秋风抹去球场上同学们体锻留下的最后一丝余热,晚修的铃声在空气中飘转回旋时,同学们已经在班里勤奋的学习——不,除了我。阳光无法透过厚实的窗帘照在我的显示屏前,秋风永远不敌机房内冰冷的空气,连上
2015-10-18 20:29:51 1899 4
原创 【bzoj4147】 [AMPPZ2014]Euclidean Nim
这题不错啊。。。 E操作时,若n>p则任意取p的倍数,否则+p P操作时同理。 问最终谁会取完。exciting!推了三节数学课(雾)!首先可以打表看看规律……然而并没有什么卵用 注意到标题是Euclidean Nim,猜测这题和Euclid肯定有关系(斜眼),然后可以尝试用扩欧手动模拟一下,胡乱搞搞。画出几十棵博弈树后就可以大概猜出结果肯定和n,p,q的大小关系有关以下来推结论。首先无解的
2015-10-17 11:53:40 1035
原创 【bzoj4145】[AMPPZ2014]The Prices
状压背包 不太好说 很容易写然而一开始写了个O(n3m)O(n3^{m})的T傻了没反应过来……总之这个就是当前走到了第i个商店,购买状态是s,然后背包转移,O(nm2n)O(nm2^{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;
2015-10-09 15:47:21 1217
原创 【bzoj4152】[AMPPZ2014]The Captain
ljh出的省赛模拟的水题三号是这种题被出烂了还是这玩意本身就是原题啊……不能理解对于每个点能对最短路产生贡献的只有x或y坐标与其相邻的点,然后就是sort一下建图跑最短路。然后!!!!!!!!! 最短路!!!!!!!! 不知道是我写的挫还是怎么 尼玛spfa居然T掉了是什么心态???强行卡spfa是吧????还好我是cpp选手能写dij+heap 2333#include <bits/stdc
2015-10-06 21:06:33 1413 1
原创 【bzoj4146】 [AMPPZ2014]Divisors
。。。。。。。 又WA又T一时爽一开始以为O(nloga)O(n\log a)过不了。。。。。。 后来发现。。。。。。是把小数据的时间也给用上了。。。。 bzoj的评测时间比较神奇。。。。。直接像筛一样搞就行了。CF里面似乎很多这种题。 Hn=∑nk=1nk=O(nlogn)H_{n}=\sum_{k=1}^{n}\frac{n}{k}=O(n\log n) 直接统计一开始T了之后YY了各
2015-10-06 21:01:28 1403
原创 【bzoj4144】[AMPPZ2014]Petrol
感觉这类型的题都出烂了。。。 和bzoj 4242差不多。。。 只不过那个是n×n的然后有些小技巧罢了。多源最短路+最小生成树+链上查询(+倍增?)如果要直接查询u->v的路径是很困难的一件事,所以尝试着把图转换成一棵树。注意到只要一条边足够短那么它就是一定可以走的。既然所有的查询点都是加油站,那么就相当于在一棵每一条边都足够小的生成树上查询两点之间的最大边权。把所有加油站扔进队列里跑多源最短路
2015-10-06 20:52:59 1321
原创 【bzoj4143】[AMPPZ2014]The Lawyer
这是noip–难度吧。。。。。 把第i天的所有左端点排序,然后upper_bound右端点就行了。 唔。。。。。。。。。。#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 pi
2015-10-06 20:41:20 1119
原创 【bzoj3450】 Tyvj1952 Easy
我是sb! WA了两发哈哈哈哈哈哈记录第i个位置的期望连击长度l[i]和期望得分f[i]直接搞都不好说什么了sigh#include <bits/stdc++.h>#define rep(i,a,b) for(int i=a;i<=b;i++)int n;char st[300001];long double l[300001] , f[300001];int main() { sc
2015-10-04 16:32:17 781
原创 【bzoj3029】守望者的挑战
简单的概率DP 设f[i][j][k]f[i][j][k]表示到了第i项挑战,赢了j次,包包容量为k的概率。 易得 f[i][j][k]=f[i−1][j−1][k−a[i]]∗p[i]+f[i−1][j][k]∗(1−p[i])f[i][j][k]=f[i-1][j-1][k-a[i]]*p[i]+f[i-1][j][k]*(1-p[i]) 注意k可以是负数 最后把所有j>=l且k>=0
2015-10-04 15:53:51 1093
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人