摘要: 在bzoj上乱翻,发现了可持久化并查集,然后baidu了一下,发现一种叫rope的东西。 !!!真的太爽了!!! 直接上代码,感受一下(也是蒯来的)。 由于rope的底层实现,insert,erase,get都是logn的 就是翻转不行,不是自己手写的打不了标记。 rope的部分简单操作 函数 功能 阅读全文
posted @ 2016-03-25 21:06 Yangjiyuan 阅读(456) 评论(0) 推荐(0) 编辑
摘要: x2 ≡ 1 mod n => x2 = k * n + 1 => n | (x + 1) * (x - 1) 令n = a * b,则 (a | x + 1 且 b | x - 1) 或 (a| x - 1 且 b | x + 1) 于是暴力枚举a ∈ [1, sqrt(n)] 就好了 然后直接丢 阅读全文
posted @ 2016-03-25 21:05 Yangjiyuan 阅读(151) 评论(0) 推荐(0) 编辑
摘要: 首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案。 为了避免重复的方案被转移,所以我们以硬币种类为第一层循环,这样阶段性的增加硬币。 一定要注意这个第一层循环要是硬币种类,并且初始 f[0] = 1。 之后对于每个询问 (A1, A2, A3, A4, S) 阅读全文
posted @ 2016-03-25 21:04 Yangjiyuan 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 按照t2从小到大排列之后贪心。 若当前任务可以插入,则插入。 若当前任务不可以插入,分两种情况: ①当前任务的耗时大于等于之前插入的任务的最大耗时:跳过当前任务 ②当前任务的耗时小于之前插入的任务的耗时:将最前插入的耗时最大的那个任务删除,插入当前任务 用堆维护 #include<algorithm 阅读全文
posted @ 2016-03-25 21:04 Yangjiyuan 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 设F[i][j]表示在第i首歌曲结束后,音量能否刚好为j 转移:F[i][j]=F[i][j-C[i]] or F[i][j+C[i]] 初始化:F[0][beginlevel]=true 最后在所有F[N][j]中找到F[N][j]为true的且要让j尽量大。 如果所有0<=j<=maxlevel 阅读全文
posted @ 2016-03-25 21:03 Yangjiyuan 阅读(164) 评论(0) 推荐(0) 编辑
摘要: n=d*(u^2+v^2),枚举d(从1到sqrt(n)),然后判断n/d和d。再枚举一组u,v,如果gcd(u,v)=1,则是一组可行解。枚举八分之一圆,答案乘以8,再加上4个坐标轴上的点。 #include<algorithm> #include<iostream> #include<cstdl 阅读全文
posted @ 2016-03-25 21:02 Yangjiyuan 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 树状数组 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> #include<queue> using namespace std; 阅读全文
posted @ 2016-03-25 21:02 Yangjiyuan 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 贪心 将双方的选手均按从强到弱排序,然后第一次扫描尽可能用当前剩下的选手中能赢对手当前最强选手中最弱的一个去赢得胜利,若无法做到,则暂时不考虑给对方最强的选手匹配对手。第二遍扫描使用同样策略去获取尽量多的平局。最后剩下的选手任意匹配就能获得最多的分数。 #include<algorithm> #in 阅读全文
posted @ 2016-03-25 21:01 Yangjiyuan 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 题意:就是说一开始一个序列是空的,然后每次可以将连续的一段染成同一颜色,问多少次才能到目标状态。 一开始想的是二分,然后题解DP。。。 f[i][j]表示区间[i,j]需要染色多少次 首先初始状态是f[i][i]=1和f[i][i+1]=str[i]==str[i+1] 然后从短区间地推到长区间 对 阅读全文
posted @ 2016-03-25 21:00 Yangjiyuan 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 先打出nand表 0 nand 0=1 1 nand 1=0 0 nand 1=1 1 nand 0=1 容易发现(!a)=a nand a 然后(a&b)=!(a nand b) 然后(a|b)=!((!a)&(!b)) 然后(a^b)=(a|b)&(a nand b) 所以通过nand我们可以实 阅读全文
posted @ 2016-03-25 21:00 Yangjiyuan 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 首先可以知道,如果已知第一行和第一列的数,那么可以很容易的计算出其余的数。进一步的,如果笔算将每个数的表达式写出可以得出如下结论: 第i行的第j个数(i>1,j>1)只与(1,1),(i,1),(1,j)有关 更数学化地说,设输入矩阵为S,定义C如下: C(i,j)=0 i=1或j=1 S(i,j) 阅读全文
posted @ 2016-03-25 20:59 Yangjiyuan 阅读(625) 评论(0) 推荐(0) 编辑
摘要: 首先枚举等待牌,再枚举对子牌。 然后1~n扫一遍,如果现在 s[i]不能被3整除,那么必须跟后两个数搭配几下变成能被3整除的。然后如果能被3整除,那么只要三个连续的一组可行,则三个相同的一组必定也可行。因为如果有一种方案是3个连续的而最小数又能被3整除,那这种就必须有3n组,3n组的话三个相同的为一 阅读全文
posted @ 2016-03-25 20:58 Yangjiyuan 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 给定一个无向图,求联通块个数,以及k次每次摧毁一个点后的联通块个数 将边和摧毁的点全记录下来,反着做即可 注意被摧毁的点不能算作联通块 #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #includ 阅读全文
posted @ 2016-03-25 20:57 Yangjiyuan 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 看了数据范围,想想这不暴力可以过?? DP #include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<cmath> using namespace std; 阅读全文
posted @ 2016-03-25 20:56 Yangjiyuan 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 题目大意:要求把n个点分成m块,使得每一块之间的距离的最小值最大 n^2枚举所有点之间距离 然后sort一下 并查集维护连通关系 一开始e[]开MAXN然后WA了测了4ms,然后开MAXN<<2又WA不过测了24ms,再开MAXN<<5又WA测了68ms ,又开MAXN<<10 TLE了= =,最后 阅读全文
posted @ 2016-03-25 20:56 Yangjiyuan 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 二分答案 验证有一种贪心的思想,就是如果这条路的c1比二分的值还小,那就要果断选择一级公路。 搜过一遍后,如果可供选择的一级公路小于k,就可以直接返回否了。 接下来继续选择,如果可以选到n-1条路,就可以,否则就不可以。 选择道路时,选择的一定是不在一个集合里及不连通的,要用并查集优化。 #incl 阅读全文
posted @ 2016-03-25 20:55 Yangjiyuan 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 显然我们取的肯定是前ans块木板。然后砍的木材也应该是从小到大砍(如果小的木材可以满足条件,就一定不会去动大的木材) 所以两遍排序。 二分答案。 然后对于要取的每块木板,我们搜索它是在第x块木板上砍下来的。。 要加剪枝: ①如果砍下了这块木材然后这块木材小于第一块木板,那就失去价值,用t来记录。当t 阅读全文
posted @ 2016-03-25 20:54 Yangjiyuan 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 直接手动模拟 速度快啊。。 Language: C++ Result: Accepted Time:452 ms Memory:2836 kb Language: C++ Result: Accepted Time:452 ms Memory:2836 kb #include<algorithm> 阅读全文
posted @ 2016-03-25 20:53 Yangjiyuan 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 此题考察差分约束系统,用SPFA求最长路。 构图,边的权值只为0(等于 大于等于 小于等于)或1(大于 小于),dist数组存最长距离,即该小朋友的最少糖果数。 一次SPFA之后,直接输出dis数组总和,即为总糖果数。 注意事项: 1)由于等于是双向边,Node数组开两倍MAXN. 2)读入判断自环 阅读全文
posted @ 2016-03-25 17:44 Yangjiyuan 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 这是一道数学题。属于排列组合问题。 题目抽象一下就是有n个格子,用m种颜色染色,求有两个相邻的同色的情况有多少种。 其实反过来考虑更好算。 总的方案数为mn,减去每个相邻的都不同色的情况既可。 考虑每个相邻的都不同色,第一个格子可以用m中,后面的每一个格子都只能用m-1中,所以就是m(m-1)n-1 阅读全文
posted @ 2016-03-25 17:44 Yangjiyuan 阅读(137) 评论(0) 推荐(0) 编辑