随笔分类 -  基本算法--------------------------

摘要:【题目】洛谷10月月赛R1 提高组 【题意】给定n*n棋盘和<=16个棋子,给几个棋子种类和攻击范围,现我方只有一马,求能否吃王。 【算法】状压+BFS 【题解】16种棋子中,马不能吃马,直接处理马和王,那么就剩13个棋子,可以压成2^13表示棋盘现有棋子存活状态。 然后对vis[2^13][n][ 阅读全文
posted @ 2017-10-08 18:01 ONION_CYC 阅读(222) 评论(0) 推荐(1)
摘要:【题意】已知n天股价,每天可以买入一股或卖出一股或不作为,最后必须持0股,求最大收益。 【算法】堆 贪心? 【题解】 不作为思想:【不作为=买入再卖出】 根据不作为思想,可以推出中转站思想。 中转站思想:【买卖可以借助中转站,差值累加】 做法:从左到右,每次将两个-v加入堆,然后取大堆顶出来组成买卖 阅读全文
posted @ 2017-10-01 11:55 ONION_CYC 阅读(761) 评论(0) 推荐(2)
摘要:【题意】n头牛,一些向前一些向后,每次可以使连续k头牛转身,求使旋转次数最小的k。 【算法】贪心 【题解】这题题解很迷,大概思想是k没有单调性,故枚举k,从左到右扫描遇到一只向后的牛就旋转一次。 贪心正确性易证:旋转前面已经好的显然不可能更优,故往后旋转。 然后还有结尾不足k头牛算错……为什么?不知 阅读全文
posted @ 2017-09-27 19:47 ONION_CYC 阅读(364) 评论(0) 推荐(0)
摘要:【题意】给定有向图,边严格从大编号指向小编号,求前k短路。n<=1000,m<=10000,k<=100。 【算法】归并+拓扑排序||A*求第k短路 【题解】因为此题自带拓扑序的特殊性,可以用归并写。 f[i][j]表示从i出发的第j短路,将i出去的点的前k短路依次归并。 复杂度O(m*k)。 #i 阅读全文
posted @ 2017-09-26 15:06 ONION_CYC 阅读(182) 评论(0) 推荐(0)
摘要:【算法】贪心扫描线(+堆) 【题意】给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数。 【题解】 参考:[bzoj1707]: [Usaco2007 Nov]tanning分配防晒霜 by czllgzmzl 本题同样是区间和点的贪 阅读全文
posted @ 2017-09-22 22:10 ONION_CYC 阅读(304) 评论(0) 推荐(0)
摘要:【算法】高精度乘法 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=100; char s1[maxn],s2[maxn]; int a[maxn],b[maxn], 阅读全文
posted @ 2017-09-22 20:15 ONION_CYC 阅读(210) 评论(0) 推荐(0)
摘要:【算法】贪心+线段树 【题意】给定n个数字ci,m个区间[a,b](1<=a,b<=10^5),每个位置最多被ci个区间覆盖,求最多选择多少区间。 附加退化问题:全部ci=1,即求最多的不相交的区间。 【题解】本题是区间和点之间的经典贪心,有两种经典做法,本质思想都是通过排序实现扫描线,细节根据题目 阅读全文
posted @ 2017-09-22 12:58 ONION_CYC 阅读(355) 评论(0) 推荐(0)
摘要:【算法】模拟 【题解】O(n^2)预处理横线(y),纵线(x),主对角线(y-x+n),副对角线(x+y)。 然后n^2枚举每个点。 阅读全文
posted @ 2017-09-22 07:17 ONION_CYC 阅读(193) 评论(0) 推荐(0)
摘要:【算法】搜索 【题意】给定无向图,现在可能有一些点已经被删除,只给出信息是c个点不能到达结点1,求最少的不能到达结点1的个数(含已删除点)。 【题解】 真是一道奥妙重重的题目。 每个点不能到达结点1,就需要阻断所有它和1之间的路径,而要使答案最小,显然阻断该点相邻的点最优。 如果该点的邻点不能到达1 阅读全文
posted @ 2017-09-21 22:01 ONION_CYC 阅读(191) 评论(0) 推荐(0)
摘要:【算法】并查集+平衡树+数学+扫描线 【题解】 经典曼哈顿距离转切比雪夫距离。 曼哈顿距离:S=|x1-x2|+|y1-y2|<=c 即:max(x1-x2+y1-y2,x1-x2-y1+y2,-x1+x2+y1-y2,-x1+x2-y1+y2) 令X1=x1+y1,Y1=x1-y1,则转化为 切比 阅读全文
posted @ 2017-09-15 17:04 ONION_CYC 阅读(306) 评论(0) 推荐(0)
摘要:【算法】扫描线+平衡树(set) 【题解】很明显的二维偏序数点,排序后扫描线,现加点后查询答案。 则问题转化为一维偏序,显然贪心找第一个比当前大的最优,所以用平衡树维护。 记得开multiset!!! #include<cstdio> #include<algorithm> #include<cst 阅读全文
posted @ 2017-09-08 16:51 ONION_CYC 阅读(206) 评论(0) 推荐(0)
摘要:【算法】模拟 【题意】http://codeforces.com/contest/849/problem/D 给定n个点从x轴或y轴的位置p时间t出发,相遇后按对方路径走,问每个数字撞到墙的位置。(还是乖乖啃原题意去吧233) 【题解】 两个数会相撞,当且仅当xi+tj=xj+ti,即xi-ti=x 阅读全文
posted @ 2017-09-06 14:08 ONION_CYC 阅读(273) 评论(0) 推荐(0)
摘要:【算法】主席树||离线+树状数组 【题解】 主席树经典应用:找区间不同的数字个数。 做法:记录每个数上一次出现的位置last[i],对last建权值线段树,对于区间询问last[i]<L的数字个数。 注意权值范围是last[i],也即0~n。 注意x=0时返回,否则可能c<0就完了。 #includ 阅读全文
posted @ 2017-09-03 21:43 ONION_CYC 阅读(279) 评论(0) 推荐(0)
摘要:【算法】高斯消元-异或方程组 【题解】良心简中题意 首先开关顺序没有意义。 然后就是每个点选或不选使得最后得到全部灯开启。 也就是我们需要一种确定的方案,这种方案使每盏灯都是开启的。 异或中1可以完美实现取反。 故令xi表示第i盏灯的开关情况,然后对每盏灯的亮灭列方程,即 (1*x1)^(1*x2) 阅读全文
posted @ 2017-08-31 20:45 ONION_CYC 阅读(490) 评论(0) 推荐(2)
摘要:【算法】树上贪心 【题解】 因为一个点必须被覆盖,那么它如果没有被子树节点覆盖的话,就覆盖它的父节点。 从叶子开始贪心。 注意,如果它自己已经被选了就不需要选父节点了。 #include<cstdio> #include<algorithm> #include<cstring> #include<c 阅读全文
posted @ 2017-08-31 12:36 ONION_CYC 阅读(159) 评论(0) 推荐(0)
摘要:【算法】树型DP||树的重心(贪心) 【题解】 两遍DFS,第一次得到所有节点子树的路径和,第二次给出除了该子树外其它部分的路径和,时时计算答案。 long long!!! #include<cstdio> #include<cstring> #include<algorithm> #include 阅读全文
posted @ 2017-08-30 18:29 ONION_CYC 阅读(204) 评论(0) 推荐(0)
摘要:【题意】给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值。n<=10^5。 【算法】贪心+堆 【题解】 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为后面的点会占用到前面的,不能保证已选的就是最优的。 正确的贪心:按顺序选择前面所有点,并把价值取负后加入堆 阅读全文
posted @ 2017-08-29 19:46 ONION_CYC 阅读(299) 评论(0) 推荐(0)
摘要:【算法】二分+矩阵快速幂 【题意】给定矩阵A和整数k,MOD,求A^0+A^1+A^2+...+A^k。 【题解】 定义题目要求的答案为f(n),即: $$f_n=\sum_{i=0}^{n}A^i$$ 当n为偶数时,可以拆成两半,后一半由前一半集体乘A(n/2)得到,即: $$f_n=f_{\fr 阅读全文
posted @ 2017-08-28 22:00 ONION_CYC 阅读(214) 评论(0) 推荐(0)
摘要:【题意】给定n个点和m条无向边(有重边无自环),每个点有权值di=-1,0,1,要求仅保留一些边使得所有点i满足:di=-1或degree%2=di,输出任意方案。 【算法】数学+搜索 【题解】 最关键的一步:★【%2转取反】。 首先考虑在树上做这样的问题,就显得十分朴素了。每当选择一条边,边的两端 阅读全文
posted @ 2017-08-22 22:02 ONION_CYC 阅读(267) 评论(0) 推荐(1)
摘要:第一题 模拟送分。 #include<cstdio> #include<cstring> #include<cctype> #include<cmath> #include<algorithm> #define ll long long using namespace std; int read() 阅读全文
posted @ 2017-08-21 12:00 ONION_CYC 阅读(356) 评论(0) 推荐(0)