- 博客(121)
- 收藏
- 关注
原创 Codeforces 599E Sandy and Nuts 状压DP
链接 Codeforces 599E Sandy and Nuts题意 一棵树,给你若干边和若干点的最近公共祖先,求合法的树有多少个思路 看题后没什么思路的动归。 用 dp[root][mask] 表示 root为根,选择 mask 的二进制中那些点的子树的状态。所以转移方程就是 dp[root][mask] += dp[subRoot][subMask] * dp[ro
2016-03-13 00:47:44
825
原创 POJ 3580 SuperMemo SplayTree
链接 POJ 3580 SuperMemo题意 Splay Tree模板题思路 第一次写伸展树, 主要参考了 运用伸展树解决数列维护问题.pdf。 看了别人的代码,自己重新写了一下。解释见注释代码#include #include #include #define LL long long#define MAXN 200005#define INF 0x3
2016-02-27 01:46:54
418
原创 Codeforces 620D Lipshitz Sequence RMQ+二分
链接 Codeforces 620D Lipshitz Sequence题意 一个数列n个数,m个询问。问一段区间内所有子区间的 f(x)= max(abs(h[i] - h[j]) / (i - j)) 之和为多少思路 首先把每个点在坐标系中画出来,可以发现所有的f(x)一定是相邻两个数产生的。现在对相邻的求差就形成了一个新数列。 对于新数列中的每个数,用ST求他两侧最
2016-02-23 00:40:27
510
原创 HDU 5556 Ancient Go 模拟
链接 HDU 5556 Ancient Go题意 8x8的围棋,x为黑, o为白,当前下黑子能否至少提出一颗白子思路 其实这题没必要写一篇博客的,是简单的模拟。可是近段时间对围棋比较感兴趣吧,印象中这是第一次写围棋相关的题目,正好AlphaGo现在正在舆论的风口浪尖,所以还是留存一下此题吧。代码#include #define LL long long#defi
2016-02-21 20:56:51
493
原创 HDU 5556 Ancient Go 模拟
链接 HDU 5556 Ancient Go题意 8x8的围棋,x为黑, o为白,当前下黑子能否至少提出一颗白子思路 其实这题没必要写一篇博客的,是简单的模拟。可是近段时间对围棋比较感兴趣吧,印象中这是第一次写围棋相关的题目,正好AlphaGo现在正在舆论的风口浪尖,所以还是留存一下此题吧。代码#include #define LL long long#defi
2016-02-21 20:56:43
477
原创 Codefroces 618D Hamiltonian Spanning Tree 树型动规
链接 Codefroces 618D Hamiltonian Spanning Tree题意 权值均为y的完全图中部分边被权值为x的生成树取代, 求一条权值最小的哈密顿通路.思路 嗯, 看了官方题解 很明显分两种情况考虑, 当 x>=y 时, 就尽量走y边, 而只有一种情况才使得需要走x边, 就是生成树的某一个节点的度数是 n-1, 这里的答案是比较好求的. 当
2016-01-30 23:54:13
531
原创 [置顶]新的博客
博客既已搬家www.macinchang.com备注因为之前有许多文章用TinyMCE编辑的,但是现在全部是 markdown,代码插件出了点问题,必须一篇一篇的去改,略繁。。
2016-01-06 15:40:54
342
原创 2013亚洲区域赛长沙站 ZOJ 3732 Graph Reconstruction
题目链接Graph Reconstruction题意给你无向图每个点的度数, 问是否存在唯一解, 存在输出唯一解, 多解输出两个, 无解输出IMPOSSIBLE思路这里用到了 Havel-Hakimi定理, 实际上就是按照度数构图的一种贪心策略. 这样能判断出来一个解或无解, 多解的情况, 只要在比较构图时最后面两个点的当前度数一样, 那么选其一都是可行的, 但是选其一的情况有保证
2016-01-06 15:40:43
387
原创 [C++] upper_bound和lower_bound
upper_bound 源码template class ForwardIterator, class T> ForwardIterator upper_bound (ForwardIterator first, ForwardIterator last, const T& val){ ForwardIterator it; iterator_traits::difference_
2016-01-06 15:40:38
415
原创 2015合肥网络赛 HDU 5489 Removed Interval LIS+线段树(树状数组)
HDU 5489 Removed Interval题意:求序列中切掉连续的L长度后的最长上升序列思路:从前到后求一遍LIS,从后往前求一遍LDS,然后枚举切开的位置i,用线段树维护区间最大值,在i~n中找到第一个比a[i - L]大的位置k,用LIS[i - L] + LDS[k]更新答案.代码#include #include #include #include #i
2016-01-06 15:40:33
412
原创 2015合肥网络赛 HDU 5492 Find a path 动归
HDU 5492 Find a path题意:给你一个矩阵求一个路径使得 最小。思路: 方法一:数据特别小,直接枚举权值和(n + m - 1) * aver,更新答案。 方法二:用f[i][j][k]表示到达[i,j]是权值和为k时平方和的最大值,转移方程就是 f[i][j][k] = min(f[i][j][k], min(f[i - 1][j][k - a
2016-01-06 15:40:31
494
原创 2015上海网络赛 HDU 5478 Can you find it 数学
HDU 5478 Can you find it题意略。思路:先求出n = 1 时候满足条件的(a,b), 最多只有20W对,然后对每一对进行循环节判断即可 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include
2016-01-06 15:40:26
467
原创 2015上海网络赛 HDU 5475 An easy problem 线段树
题意就不说了思路:线段树,维护区间乘积。2操作就将要除的点更新为1. 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #includeset> 9 #includestring> 10 #define inf 0
2016-01-06 15:40:24
339
原创 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
2015北京网络赛 D-The Celebration of Rabbits题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000)。 设a为一个长度为2n+1的序列。 设f(x)为满足x≤ai≤m+x且ai的异或和为0 的序列a的个数。 求 ∑Rx=Lf(x)mod1000000007思路:因为对于每一个第一次分配后的a序列对应唯一
2016-01-06 15:40:20
468
原创 2015北京网络赛 J Scores bitset+分块
2015北京网络赛 J Scores题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂。bitset之前没用过,查了下发现其实就是一个二进制表示,这里的每一位就表示原序中的状态。 建一个bitset bs[6][sqrt(50000)], bs[i][j] 就表示在第i维上前j个块中的数据
2016-01-06 15:40:17
363
原创 2015北京网络赛 Couple Trees 倍增算法
2015北京网络赛 Couple Trees题意:两棵树,求不同树上两个节点的最近公共祖先思路:比赛时看过的队伍不是很多,没有仔细想。今天补题才发现有个 倍增算法,自己竟然不知道。 解法来自 qscqesze ,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上是过不了的。 其他解法有树链剖分?并不是很清楚。就这样水过了吧。。。
2016-01-06 15:40:13
387
原创 POJ 1330 Nearest Common Ancestors 倍增算法的LCA
POJ 1330 Nearest Common Ancestors题意:最近公共祖先的裸题思路:LCA和ST我们已经很熟悉了,但是这里的f[i][j]却有相似却又不同的含义。f[i][j]表示i节点的第2j个父亲是多少 这个代码不是我的,转自 邝斌博客 1 /* *********************************************** 2
2016-01-06 15:40:08
463
原创 2015北京网络赛 G Boxes BFS+打表
G Boxes题意:n个位置摆有n个箱子,每次移动只能把相邻的垒起来,且上面的必须小于下面的。求摆成升序需要移动多少步。思路:这里的n很小,只有7。但是bfs最快的情况需要2s左右,所以就打表了。 诡异的是n = 6时居然都跑不出来都超时,连6也打了个表。 1 #include 2 #include 3 #include 4 #include
2016-01-06 15:40:06
530
原创 Codeforces Round#320 Div2 解题报告
Codeforces Round#320 Div2先做个标题党,骗骗访问量,结束后再来写咯。codeforces 579A Raising Bacteriacodeforces 579B Finding Team Membercodeforces 579C A Problem about Polylinecodeforces 579D "Or" Gamecodeforces
2016-01-06 15:40:01
530
原创 HDU 5446 Unknown Treasure Lucas+中国剩余定理+按位乘
HDU 5446 Unknown Treasure题意:求C(n, m) %(p[1] * p[2] ··· p[k]) 018思路:这题基本上算是模版题了,Lucas定理求C(n,m),再用中国剩余定理合并模方程,因为LL相乘会越界,所以用到按位乘。 1 #include 2 #include 3 #include 4 #include
2016-01-06 15:39:56
322
原创 HDU 5441 Travel 并查集
HDU 5441 Travel 题意:一张无向图,q个查询,对于每个x,有多少对点之间的路径中最长的一条路不大于x。思路:比赛时王秋平写的,我补下题。这题也比较简单,将边排序,从小到大加到并查集,对查询也排序,从小到大对于每个查询把不大于x的边加到并查集,用cnt[y]记录以y为根的连通块有多少节点,那么在连通块发生 变化时,ans=2 * cnt[x] * cnt[y]
2016-01-06 15:39:52
308
原创 HDU 5444 Elven Postman 二叉排序树
HDU 5444 题意:给你一棵树的先序遍历,中序遍历默认是1...n,然后q个查询,问根节点到该点的路径(题意挺难懂,还是我太傻逼)思路:这他妈又是个大水题,可是我还是太傻逼。1000个点的树,居然用标准二叉树结构来存点,,,卧槽想些什么东西。可以用一维数组,left,right直接指向位置就行了,我这里用的是链表。对于读入的序列,生成一个二叉排序树,同时记录一下路径就可以了,后面居
2016-01-06 15:39:47
315
原创 HDU 5438 Ponds dfs模拟
2015 ACM/ICPC Asia Regional Changchun Online题意:n个池塘,删掉度数小于2的池塘,输出池塘数为奇数的连通块的池塘容量之和.思路:两个dfs模拟就行了 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7
2016-01-06 15:39:43
307
原创 Gym - 100338C Important Roads 最短路+tarjan
题意:给你一幅图,问有多少条路径使得去掉该条路后最短路发生变化。思路:先起始两点求两遍单源最短路,利用s[u] + t[v] + G[u][v] = dis 找出所有最短路径,构造新图。在新图中找到所有的桥输出就可以了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #incl
2016-01-06 15:39:38
281
原创 Gym - 100338E Numbers 贪心
Gym - 100338E题意:给你n,k问在1-n中能整出k的字典序最小的数。范围1018思路:比较简单的贪心了,枚举10的幂m,然后加上k-m%k, 更新答案就可以了,数据一定要用unsigned long long,我就在这里挂了几次,查了半天。 1 #include 2 #include 3 #include 4 #include 5 #includ
2016-01-06 15:39:29
290
原创 集训回顾
转眼之间就开学了,大三了。 暑假集训从7月13号开始,我8月27号回家,正好一个半月,开始时专题训练,然后是个人赛,然后是组队赛。总的感觉还可以,不过现在回想这段时期好像感觉还是缺了点什么,可能是还是没有认识到这次暑假集训的重要性,拼劲还不够。但是现在集训已经结束了,总结之后就要准备接下来的日常训练。上课了,和队友一起做题的时间也少了,所以自己计划一下近期的做题计划。1. WH
2016-01-06 15:39:25
290
原创 UVALive - 6268 Cycling 贪心
UVALive - 6268 Cycling题意:从一端走到另一端,有T个红绿灯,告诉你红绿灯的持续时间,求最短的到达终点的时间。x思路:
2016-01-06 15:39:20
449
原创 UVALive - 6266 Admiral 费用流
UVALive - 6266 Admiral题意:找两条完全不相交不重复的路使得权值和最小。思路:比赛的时候时间都卡在D题了,没有仔细的想这题,其实还是很简单的,将每个点拆开,连一条容量为1,费用为0的边,起点和终点容量为2,两点之间有边就加一条容量为1,费用为权值的边,这样跑一边费用流就可以了。 1 #pragma comment(linker, "/STACK:1000
2016-01-06 15:39:16
654
原创 UVALive - 6269 Digital Clock 模拟
UVALive - 6269 Digital Clock题意:时钟坏了,给你一段连续的时间,问你现在可能的时间是多少。思路:直接模拟,他妈的居然这场就跪在了这题,卧槽,他妈的就在111行,居然多打了个 = ,这是什么意思,注孤生吗 1 #pragma comment(linker, "/STACK:1000000000") 2 #include 3 #d
2016-01-06 15:39:13
344
原创 Aizu - 2564 Tree Reconstruction 并查集
Aizu - 2564 Tree Reconstruction题意:一个有向图,要使得能确定每一条边的权值,要求是每个点的入权和出权相等,问你最少需要确定多少条边思路:这题好像有一个定理之类的,对于每一个连通块,所需要的边数是 M-N(边数-点数) ,这个原理我还不是很清楚。 知道了这个之后,并查集求一下就完事了。这题我大致看了一下官方 的提交记录,发现有好多种方法可以搞。23:
2016-01-06 15:39:09
266
原创 Aizu - 2555 Everlasting Zero 模拟
Aizu - 2555 Everlasting Zero 题意:学习技能,每个技能有不同的要求,问能否学习全部特殊技能思路:枚举每两个技能,得到他们的先后学习关系,如果两个都不能先学的话就是No了,如果A>B,B>C,但是并没有A>C那么这种情况也是不允许的了,我过的也是比较惊险。 1 #pragma comment(linker, "/STACK:1000000000")
2016-01-06 15:39:06
319
原创 POJ - 3847 Moving to Nuremberg 动归
POJ - 3847 Moving to Nuremberg题意:一张无向有权图,包括边权和点权,求一点,使得到其他点的点权*边权之和最小思路: 1 #pragma comment(linker, "/STACK:1000000000") 2 #include 3 #include 4 #include 5 #include 6 #include
2016-01-06 15:39:01
361
原创 POJ - 3846 Mountain Road 动归
POJ - 3846 Mountain Road 题意:n个人要过桥,有的人从左边来,有的人从右边来,给你他们到达桥一端的时间和过桥所需要的时间,要求相向而行的只能有一人,对于每一个点,不能在10s内有同向而行的人经过。思路:f[i][j][A/B] 表示 从左边走了i个,从右边走了j个,最后一个是左边还是右边的最小时间。问你最后一辆车的到达时间最小是多少。 对于每一个这样的状态
2016-01-06 15:38:59
350
原创 POJ - 3842 An Industrial Spy dfs(水)
题意:给你一串数字,最少一个,最多七个,问用这里面的数字能组成多少素数,不重复。思路:之前还遍历10000000的每一个素数,结果超时,后来发现直接dfs就可以了,只是标记一下做过的数。 1 #pragma comment(linker, "/STACK:1000000000") 2 #include 3 #define LL long long 4 #define IN
2016-01-06 15:38:57
587
原创 UVA - 12263 Rankings 模拟(拓扑排序)
题意:1~n这n个数,给你一个初始的顺序,再告诉你那两个数的大小关系发生了变化,求变化后的 顺序,不存在则输出IMPOSSIBLE思路:这题很遗憾没在比赛的时候过掉,结束后加了一行就AC了。题目真的不难,我就是根据原顺序和变化得到任意两个数之间的大小关系。然后枚举变化后的这些数对,用构造法构造一个合法的序列,最后再和原顺序进行不重复的合并。两个数组,两个指针,合并的时候未发生变化的当前数若大于
2016-01-06 15:38:52
357
原创 manacher
1 void manacher(){ 2 int res = 0, id = 0; 3 for(int i = 1; i ) { 4 if(res > i){ 5 p[i] = min(p[2 * id - i], res - i); 6 } 7 else{ 8
2016-01-06 15:38:50
260
原创 Gym - 100637B Lunch 规律
题意:n个点,给定起点和终点,可以每次可以走一格或两格,走一格则需要一个代价,每个格子只能走一次,问从起点到终点并经过每一个点的最小代价思路:这题我没看出什么道理,先打了个暴力,结果发现了个相当坑的规律,,然后就过了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include
2016-01-06 15:38:45
353
原创 Gym - 100637A Nano alarm-clocks 模拟
题意:有n个时钟,只能顺时针拨,问使所有时间相同的最小代价是多少思路:将时间排序,枚举拨动到每一个点的时间就好了,容易证明最终时间一定是其中之一 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #inc
2016-01-06 15:38:43
350
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人