自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 bzoj 3825: [Usaco2014 Dec]Marathon

查询的答案就是完整走过所有点的距离-少走一个点可以减少的距离的最大值。所以线段树维护区间和,还有如果不走每个点,可以少走多少路然后答案就是sum[l+1,r]-max[l+1,r-1]没写%lld wa了一发#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-1

2016-05-22 22:18:34 515

原创 bzoj 4282: 慎二的随机数列

结论:所有的未知数都可以出现在最优解中。所以,把每个确定的数减去它前面未知数的个数,计算lis就行膜拜了一下popoqqq大爷优美的lis#include#include#include#include #define ll long long#define inf 1000000007#define eps 1e-10#define mdusing namespace std

2016-05-22 21:42:30 694

原创 bzoj 4591: [Shoi2015]超能粒子炮·改

S(n,k)=S(n/p,k/p-1)*S(n%p,p-1)+C(n/p,k/p)*S(n%p,k%p)意思是根据lucas定理对于i/p忘记处理sum[0][?]了#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 250

2016-05-18 20:45:23 1047

原创 bzoj 4436: [Cerc2015]Kernel Knights

T集表示已经确定不在S集内的点。对于一个点,如果不存在非T集的点挑战它,那么它一定在S集中。如果存在一个挑战它的点在S集中,那么它一定在T集中。用类似拓扑排序的方法,首先找出所有不被挑战的点,归入S,把这个点挑战的点y归入T集,然后y挑战的点的度数-1.最后剩下一些点在环中,满足每个点都被别人挑战,也挑战别人,因为是二分图,所以保证是偶环,所以把#include

2016-05-18 20:37:37 600

原创 bzoj 4530: [Bjoi2014]大融合

先说一下我的做法:没有强制在线,先建出来这棵树,然后发现x到它父亲的边的答案是 (目前连通块大小-x子树的大小)*(x子树的大小),这个子树大小也是指目前连通块内的子树大小,子树大小可以用线段树维护dfs序,进行线段树合并得到。子树size也可以用树链剖分做。#include#include#include#include #define ll long long#define inf

2016-05-18 20:13:12 771

原创 bzoj 4103: [Thu Summer Camp 2015]异或运算

水题,查询由ai^bj组成的矩形的子矩形内的k大值,行数和询问数都很少,所以可以枚举行数,跑可持久化字典树。注意不能 int l=0,r=2147483674,mid=(l+r)>>1,这个会爆int,开unsigned int 就行。还有,写可持久化主席树又忘了ch[i][0]=ch[pre][0], ch[i][1]=ch[pre][1]#include#include#i

2016-05-18 19:00:09 573

原创 bzoj 4104: [Thu Summer Camp 2015]解密运算

暴力做法: 已知长度为l的所有子串,可以推出长度为l+1的所有子串,比如样例已知长度为1的子串是?AAAABC,而以这些字符开头的字符串的结尾分别是AAAC?AB,而这些字符也是写在对应字符前面的字符,所以得到了子串{A?,AA,AA,CA,?A,AB,BC},然后再用相似的办法推出剩下的子串,但这样太慢了。我们只需要记录那个以?开头的字符串,每次这个字符串前面会加上一个新的字符,然后得知了这

2016-05-18 10:54:45 792

原创 bzoj 4592: [Shoi2015]脑洞治疗仪

线段树维护最长连续段的长度,然后暴力修改,暴力查询,这个复杂度应该是nlogn的。然而我调了好久。。。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 200010using namespace std;struct Tr { i

2016-05-17 20:43:13 1021

原创 bzoj 4590: [Shoi2015]自动刷题机

刷题数是关于n单调递减的函数,所以可以二分答案判断。无解有两种情况,一种是无论n是多少都无法ac这么多题,一种是不存在n恰好ac这么多题,判断一下就好。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 100010using

2016-05-17 15:05:59 743

原创 bzoj 4597: [Shoi2016]随机序列

对于一个表达式序列 ****+??????? 一定有一个表达式序列 ****-??????? 与它相加为0,所以对答案有贡献的是第一个非*之前的序列乘上这个序列出现的次数。对于前i个数组成的序列,出现次数=2*3^(n-i-1),前n个数组成的序列出现次数为1.所以用线段树维护这个式子的值就好了,具体实现看代码#include#include#include#include #defi

2016-05-17 14:48:07 758

原创 bzoj 4571: [Scoi2016]美味

如果没有加法,这就是一道水水的可持久化trie,有了加法,我们就要用可持久化权值线段树,然后按位贪心,查询变成一个区间内是否存在数字。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 4000010using namespace

2016-05-17 11:48:40 959

原创 bzoj 3569: DZY Loves Chinese II

神题一道。将所有边分为树边和非树边,把所有非树边随机一个权值,然后树边的权值是所有覆盖它的非树边的权值的异或和。如果一个边集的存在一个非空子集的异或和为0,那么树是不连通的。原因是:(1)删除了一条树边和所有覆盖它的非树边,那么这些边的异或和为0(2)一个点的出边只有树边,且删除了所有与它相连的树边,因为这些树边的异或和一定存在一对相同的,所以也对。然后就是如何搞出树边的权

2016-05-17 10:39:39 756

原创 bzoj 2708: [Violet 1]木偶

最优策略一定可以把整个序列分成几段,每一段都是像这样子的红线表示不可匹配。所以可以排序后dp[i]表示前i个数最多删掉多少=max(f[j-1]+cal(j,i)) cal(j,i)表示j到i最多删掉多少个。注意是判断红线相连的两个是否能够匹配,而不是第i个和第i+k个能否匹配#include#include#include#include #define ll lon

2016-05-11 16:07:10 819

原创 bzoj 3702: 二叉树

发现子树中如何排列对于兄弟节点的逆序对是没有影响的,所以统计兄弟节点之间交换和不交换的逆序对数,取较小值即可。用线段树合并时直接计算逆序对的方式可以搞到nlogn。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 200010

2016-05-11 15:22:58 522

原创 bzoj 4000: [TJOI2015]棋盘

矩乘,题意坑爹,那个第一行是中间那一行,所以记录一行的状态就可以了。f[S]表示最后一行状态为S的方案数,然后暴力看能否转移。#include#include#include#include #define ll long long#define ui unsigned int #define inf 1e9#define eps 1e-8#define md#define N 70u

2016-05-11 15:22:39 570

原创 bzoj 4569: [Scoi2016]萌萌哒

一种会T的做法:发现并查集加边只会发生n-1次,所以只要一个较小的复杂度完成这n-1次加边即可启发式合并维护并查集,每次暴力修改所有属于小区间的fa值,用vector记录每个连通块内的数,暴力在线段树内修改hash值,复杂度logn,需要进行nlogn次线段树上hash把所有的fa hash起来,然后二分找位置,每次寻找log^2,需要进行On次#include#inclu

2016-05-11 11:05:37 957

原创 bzoj 4568: [Scoi2016]幸运数字

ST表维护线性基,用ST表维护不带修改的东西可以比树剖少一个log。注意维护线性基是60*60的复杂度。#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 20010using namespace std;struct yts {

2016-05-11 11:05:15 941

原创 bzoj 4567: [Scoi2016]背单词

读题发现,只要保证每个字符串加入的时候它的后缀都加入了,那么总代价最大是n*(n-1)/2,所以不会出现第一种情况。建出一棵树,每个点的father是它最长的后缀,然后贪心每次走较小的子树就可以。找后缀可以字符串反序从短到长建trie注意在压字符串的时候,字符串大小要开总长度+字符串个数。#include#include#include#include#include#de

2016-05-11 11:04:53 736

原创 bzoj 1419: Red is good

f[i][j]表示有i个R,j个B的期望,然后转移。注意输出多位小数下取整,小数点之后要06lldll ans=floor(f[now][B]*1000000);printf("%lld.%06lld\n",ans/1000000,ans%1000000);#include#include#include#include#include#define ll long

2016-05-10 20:49:51 590

原创 bzoj 4197: [Noi2015]寿司晚宴

看到题,就想到要利用质因子分解进行状压dp,但是质因子太多了,不能直接搞,于是考虑按最大质因子sqrt(n)分别讨论。对于最大质因子>sqrt(n)的每个数,只有一个质因子>sqrt(n),而<sqrt(n)的质因子是可以状压的。f[s1][s2]表示a选的集合恰好为s1,b选的集合恰好为s2的方案数,然后就想不到了。把所有数按照最大质因子分类,每一类分别转移。令dp[0/1][s1]

2016-05-10 20:01:27 884

原创 bzoj 3120: Line

这道题,摆着它40s的时限,隐藏着卡常数的真面目。180个点的矩乘,我默上了板子,却t成狗,加了一些常数优化才过。f[i][a][b][c][j]表示前i列,有a行结尾是011 b行结尾是01 c行结尾是0,出现j列全是男生的方案数转移 f[i][a][b][c][j]*C[c][e]*C[b][d]->f[i+1][d][e][f][j+(f==0)]常数优化:1.不要 ll *

2016-05-10 15:05:01 778

原创 CTSC&&APIO2016 旅游记&&被坑记

在帝都将近十天,回家之际,有一丝急迫,也有一丝眷恋。5.1 CTSC day0        坐前一天晚上的火车,很早就到达了北京,倒了3班地铁+一班公交到达了目的地,被yts大爷领着绕了一个大圈才到宾馆,累成狗。        宾馆很高级,房间里面有70元一瓶的水,冰箱里还有各种饮料(当然是喝不起的啦),床软的可怕。睡了1个小时,人还是虚的,背了一点板子。        中午被叫

2016-05-10 14:57:45 3084 3

原创 bzoj 3176: [Coci 2012]Sort

由于第一次交换长度至少为2,所以进行完第一次交换之后,可以证明之后不再会出现长度为3的递减子段,那么就成了求逆序对、#include#include#include#include #define ll long long#define inf 1e9#define eps 1e-8#define md#define N 100010using namespace std;int c[

2016-05-10 11:10:20 459

原创 bzoj 4070: [Apio2015]雅加达的摩天楼

分层图最短路,令k=sqrt(n)如果p>k,那么从这个点出发只需要连如果p建有k+1层的分层图,把第0层视为每个位置的源点,对于p最后的建图:第1层到第k层每层都向对应的第0层连边权是0的边每一层相邻的%p相同的点互相连边权是1的边对于每个>k的,从出发点向可以到达的点连距离=跳跃步数的边发现这样内存不够,所以把k设小一点。写错的地方:1.少加了一种边

2016-05-06 16:44:09 1151

原创 bzoj 4553: [Tjoi2016&Heoi2016]序列

令L[i]表示i可以取到的最小值,R[i]表示i可以取到的最大值。如果i可以成为子序列中j的前一项,必须满足 i<j a[i]<=L[j] R[i]<=a[j],然后cdq分治注意分治的写法,不然可能卡成暴力。比较好的办法是把a和L拆成两个东西。#include#include#include#include #define ll long long#define inf 1e

2016-05-06 15:14:42 873

空空如也

空空如也

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

TA关注的人

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