- 博客(23)
- 收藏
- 关注
原创 3716: [PA2014]Muzeum 计算几何+贪心+set
刷空PA2014的CA凉果然劲啊。。这题好难。。 第一步是用计算几何的知识进行坐标变换,然后是一个最大权闭合图的模型。 由于图的特殊性可以贪心来解决。 具体参考CA的题解#include<iostream>#include<cstdio>#include<set>#include<algorithm>using namespace std;const int N=400005;int
2016-05-22 15:28:52 770
原创 3712: [PA2014]Fiolki LCA 思路题
非常神的一道题。。orzzzzz 做法: 我们用一个节点代表一个瓶子,合并的时候新建一个节点,代表合并出来的瓶子,并且向原来的两个点连边。可以发现,反应的话,其实就是两个瓶子代表节点的LCA。 然后按照LCA的深度以及时间戳排序,算答案就好了。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;
2016-05-22 15:26:16 1181
原创 3718: [PA2014]Parking 树状数组
%CA凉 代码风格药丸#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=50005;int n,m;int tree[N],pos[N];inline int read(){ int a=0,f=1; char c=getcha
2016-05-22 15:22:16 693
原创 2626: JZPFAR K-D tree
裸题,用堆维护一下。#include<iostream>#include<cstdio>#include<algorithm>#include<queue>using namespace std;const int N=100005;const int INF=1000000007;int n,D,root;int ls[N],rs[N];struct node{ int d
2016-05-21 23:45:13 549
原创 4565: [Haoi2016]字符合并 区间DP
令fi,j,kf_{i,j,k}表示区间[i,j][i,j]合并成kk的最大收益,其中K=0/1K=0/1保证[i,j][i,j]可以合并成一个数。 转移的时候用gj,kg_{j,k}表示对于当前的ii,[i,j][i,j]合并成了kk,其中kk是一个二进制数。 然后转移一下就行了#include<iostream>#include<cstdio>#include<cstring>usin
2016-05-21 23:43:45 972
原创 4566: [Haoi2016]找相同字符 广义后缀自动机
建立广义后缀自动机,维护两个串的sizesize 那么答案等于∑(leni−lenfai)×size0×size1\sum (len_i-len_{fa_i})\times size_0 \times size_1#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int N=200005;
2016-05-21 23:40:55 700
原创 2893: 征服王 tarjan+最小流
首先tarjan缩点,然后裸的最小流。 好像是个挺麻烦的费用流。。然而我写的最小流居然跑到了rank1。。#include<iostream>#include<cstdio>#include<queue>#include<cstring>#include<vector>using namespace std;const int N=1100;const int M=50005;con
2016-05-21 23:35:12 624
原创 3180: [Coci2012]ograda 贪心
可以发现答案只与拐点有关,所以贪心就行了,最后把中间的点放进去。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int N=300005;int n;int num[N],ss[N],ans[N];inline int read(){ int a=0,f=1; char
2016-05-21 23:29:25 634
原创 3463: [COCI2012] Inspector 分块+凸壳
可以发现答案一定在下凸壳上,我们考虑分块,然后如果有修改操作在块上打标记,查询的时候暴力重构。 由于TT是单调的,所以维护一个队列,弹出队头元素直到到了TT所在的直线就好了。#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>using namespace std;const int N=100005;c
2016-05-21 23:27:47 508
原创 3181: [Coci2012]BROJ 找规律
我们根据PP的大小来分类,当PP比较大的时候,10910^9范围内PP的倍数会比较少,暴力枚举就可以。 PP比较小的时候,我们来找循环节。 令C=∏pi<=PpiC=\prod_{p_i<=P}p_i,假设ii合法,则i+Ci+C也合法。 证明: 若C+iC+i不合法, 则存在质因子p<Pp<P且p∣C+ip\mid C+i,因为p∣Cp\mid C,所以p∣ip\mid i,矛盾。 所以
2016-05-21 23:24:37 618
原创 3176: [Coci 2012]Sort 树状数组
可以发现第一次reverse后,只会存在一些长度为2的递减序列,其实就是逆序对的数量了。#include<iostream>#include<cstdio>using namespace std;int n,a[100005],tree[100005];long long ans;inline int read(){ int a=0,f=1; char c=getchar();
2016-05-21 23:14:54 593
原创 2275: [Coci2010]HRPA 打表/齐肯多夫定理
博弈什么的真是弱啊。。虽然这题根本用不到博弈的知识。。但看着这类问题就懵逼。 记得sxb是打表找规律过的。。 题解是一个叫做齐肯多夫定理的东西。。可以百度一下qwq#include<iostream>#include<cstdio>using namespace std;long long n;int cnt;long long f[100];int main(){ scanf
2016-05-21 23:11:43 1218
原创 3881: [Coci2015]Divljak fail树+树链的并
我们对SS集建立AC自动机,用TT集中的串算答案。 可以发现在AC自动机上运行串时,所经过的节点和沿这个节点的fail指针向上经过的所有节点代表的串都在TT中出现过。所以要求的就是一些树链的并集。 我们把这些点拿出来按照fail树的dfs序排序,用树状数组维护dfs序的前缀和,把每个点处+1,把两两lca处-1,询问就变成询问子树了。#include<iostream>#include<cst
2016-05-21 23:07:17 803
原创 3188: [Coci 2011]Upit splay
splay,对于区间加等差数列的操作,我们可以发现等差数列的首项和公差是可以分开考虑并且可叠加的。那么就打标记就好了。#include<iostream>#include<cstdio>using namespace std;const int N=200005;int n,Q,t1,t2,tot,root;int fa[N],tree[N][2];long long size[N],su
2016-05-21 22:54:56 680
原创 3743: [Coci2015]Kamp BFS
首先我们可以搞出这KK个点的一棵生成树,记这棵生成树的边权和为sumsum。 假设每次都要返回出发点xx,那么这里分两种情况讨论: 如果xx是KK个点中的某个点,那么答案为2×sum2\times sum 否则,答案为2×sum+mindis(x,tree)2\times sum+mindis(x,tree) 那么如果不需要返回的话,答案在以上基础上上要减去maxdis(x,i)(i bel
2016-05-21 22:52:19 759
原创 3810: [Coci2015]Stanovi 记忆化搜索
首先观察性质:对于一个合法的方案,总能将矩形分成两部分。 否则总会有四面均不接触边界的矩形。 那么我们用fn,m,u,d,l,rf_{n,m,u,d,l,r}表示n×mn\times m的矩形,四个边界是否存在(0/1)(0/1)然后记忆化搜索#include<iostream>#include<cstdio>#include<cstring>using namespace std;con
2016-05-21 22:45:52 853
原创 4571: [Scoi2016]美味 主席树+贪心
建立主席树,然后从高位到低位贪心就好了。#include<iostream>#include<cstdio>using namespace std;const int MAXN=100000;const int N=200005;const int M=5000005;int n,m,size;int root[N];int ls[M],rs[M],sum[M];inline int
2016-05-21 22:41:44 936
原创 3727: PA2014 Final Zadanie 乱搞
很神的一道题。参考PoPoQQQ的题解: 首先转化为以11为根的有根树,sizeisize_i表示以ii为根的子树的aia_i的和。 那么有 b1=∑ai×disib_1=\sum a_i\times dis_i bi=bfai−sizei+(size1−sizei)b_i=b_{fa_i}-size_i+(size_1-size_i) 并且有ai=sizei−∑sizesonia_i=s
2016-05-21 22:36:32 2901
原创 SDOI2016 Round2 退役记
两年OI一场空,一场R2见祖宗。Day-?一轮回来后刷题效率并不高,与yts,sxb,DQS,Menci,wmy,yzy一起进行了几场胡策,场场垫底的我仰慕大爷们AK。 之后刷题乱做一气,做了做tsinsen,然后做了做各省省选,做了做COCI。 考前听说了悲伤的消息:教练有事班主任跟着去,压力++。Day0根据学校的坑爹安排只好10点就出发,也没堵车于是11点就到了火车站取了票,然后班主任请我
2016-05-14 18:05:54 2337 3
原创 SDOI2016 Round2 Bless All
NOIP完跪 WC完跪 HN集训一直被虐 SDOI2016 Round1完跪 CTSC&APIO因为奇♂怪的原因没去成 居然还没退役好好享受OI生涯的最后一场比赛吧。 Bless All。
2016-05-13 09:10:54 945 1
原创 4569: [Scoi2016]萌萌哒 倍增+并查集
好神的一道题,不会做。 %Claris#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int N=100005;const int mod=1000000007;int n,m,ans;bool vis[N];int f[17][N];inline int read(){
2016-05-02 20:23:18 548
原创 4568: [Scoi2016]幸运数字 倍增+线性基
#include<iostream>#include<cstdio>#include<cmath>#include<vector>#include<cstring>using namespace std;const int N=20005;int n,Q,cnt;int deep[N],head[N],next[N<<1],list[N<<1];long long q[N<<1];
2016-05-02 20:21:18 1260
原创 4567: [Scoi2016]背单词 trie+贪心
代码能力太弱。。想了5分钟写了1小时。。 耐下心来读完题,然后发现最优解一定是不会出现第一种情况的,也就是说如果访问一个串之前一定要访问这个串的所有后缀。 那么我们把串反过来,转换成前缀,也就是沿着trie走的问题。然后就贪心一波,先走子树小的再走子树大的就行了。#include<iostream>#include<cstdio>#include<vector>#include<cstri
2016-05-02 20:09:44 1188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人