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

摘要:【题意】给定n个节点的树,每个节点有一个m位二进制数,数字可以随时按位取反,每个数位有一个价值,定义每个点的最大价值是从根到这个点路上的数字(可以取反)或起来的数字中,1有价值0无价值,加起来得到的最大价值。 得到所有点的最大价值后,相邻点若同价值则断边,最后求长度为d的路径数量(边长1),d取遍0 阅读全文
posted @ 2017-08-15 08:59 ONION_CYC 阅读(168) 评论(0) 推荐(0)
摘要:第一题 题意:给定n*m网络,定义两个棋子在同行同列则相互攻击,同时要求两个棋子的行和列不能一小一大,求满足条件的最大摆放的方案数。 题解:ans=C(max(n,m),min(n,m)),就是在max中取min个数字的组合,组合内排序构成一种方案。 #include<cstdio> #includ 阅读全文
posted @ 2017-08-13 19:48 ONION_CYC 阅读(211) 评论(0) 推荐(0)
摘要:【关键字】偏序,数点,树状数组,线段树,扫描线。 因为涉及多种算法,所以整合到一起。 【扫描线】 二维数点,偏序 ★数点问题 ★关于偏序问题的一些总结 扫描线是一维离线的做法的统称,常用于解决k维偏序问题。 离线:将其中一维的询问排序后按顺序处理,从而实现按时间顺序处理的过程中可以O(1)统计空间上 阅读全文
posted @ 2017-08-12 11:11 ONION_CYC 阅读(993) 评论(0) 推荐(1)
摘要:【算法】扫描线:差分+树状数组 【题意】转化模型后:求每个矩形覆盖多少点和每个点被多少矩形覆盖。n<=10^5。 【题解】经典的扫描线问题(二维偏序,二维数点)。 数点问题 将所有询问离线并离散化,然后按从上到下排序。 对于点被覆盖问题: 扫描线从上到下进行,遇到矩阵上边界维护区间加,遇到矩阵下边界 阅读全文
posted @ 2017-08-11 21:28 ONION_CYC 阅读(468) 评论(0) 推荐(0)
摘要:【算法】二分+贪心 【题意】转换模型后大概是:给定n,T,n个数字和n个坐标,自行选择一个起点,从起点往最近的数字跑一次往返拿回1,T为最长距离限制,求至多拿多少数字。 【题解】 比赛题解:http://vfleaking.blog.uoj.ac/blog/43 对于每个点从左到右,其能取的左右区间 阅读全文
posted @ 2017-08-11 16:08 ONION_CYC 阅读(377) 评论(0) 推荐(0)
摘要:【算法】折半搜索+数学计数 【题意】给定n个数(n<=20),定义一种方案为选择若干个数,这些数可以分成两个和相等的集合(不同划分方式算一种),求方案数(数字不同即方案不同)。 【题解】 考虑直接枚举集合的子集,再枚举子集的子集(划分方式),相当于将子集看成天平,枚举子集一些数置左,剩余数置右,则每 阅读全文
posted @ 2017-08-09 16:47 ONION_CYC 阅读(290) 评论(0) 推荐(0)
摘要:【算法】区间DP 【题意】平面上有n个点(xi,yi),用最少个数的底边在x轴上且面积为S的矩形覆盖这些点(在边界上也算覆盖),n<=100。 【题解】随机大数据下,贪心几乎没有错误,贪心出奇迹啊! f[i][j][h]表示区间i~j高度>=h的点全部被覆盖的最少矩形。 首先离散化横纵坐标,然后初始 阅读全文
posted @ 2017-08-06 11:15 ONION_CYC 阅读(189) 评论(0) 推荐(0)
摘要:【题意】给定长度为n的整数序列,求长度为[L,R]的前k大区间和的和。n,k<=500000。 【算法】堆+贪心+RMQ 【题解】考虑暴力是取所有长度为[L,R]的子串的前k大求和,复杂度O(n^2)。 发现左端点相同的区间[l,r]中,最大的区间和就是最大的sum[r](sum是前缀和数组)。 然 阅读全文
posted @ 2017-08-04 12:01 ONION_CYC 阅读(203) 评论(0) 推荐(0)
摘要:【算法】贪心 【题解】 DP可以f[i][0],f[i][1]表示选了i分别满足条件AB的答案,其优化也是利用了下面的性质,不多赘述。 想象数列的波动,最大值一定是取每个波峰和每个波谷,那么只要O(n)统计就可以了。 #include<cstdio> #include<cstring> #inclu 阅读全文
posted @ 2017-07-19 08:33 ONION_CYC 阅读(169) 评论(0) 推荐(0)
摘要:【算法】模拟 #include<cstdio> #include<algorithm> using namespace std; const int maxn=100010,maxm=1000010; int a[maxn],A[maxm],n; int main() { scanf("%d",&n 阅读全文
posted @ 2017-07-17 22:02 ONION_CYC 阅读(254) 评论(0) 推荐(0)
摘要:【算法】贪心+堆 【题意】n个数字的序列,要求选择互不相邻的k个数字使和最大。 【题解】 贪心,就是按一定顺序选取即可最优,不会反悔。 考虑第一个数字选择权值最大的,那么它相邻的两个数字就不能选择,那么我们可以把这三个数字视为一个整体。操作为将pre[pre[x]]和x和suc[suc[x]]连接起 阅读全文
posted @ 2017-06-28 14:17 ONION_CYC 阅读(410) 评论(0) 推荐(1)
摘要:【算法】贪心,一般DP 【题解】 胡策k≤10的环状DP做法: 1.钦定法:先确定第一位(可能和第n位)的状态,然后后面正常做DP,显然正确答案是一定会被记录的,因为从整体上看不会有影响。 2.环的特性:取的段和不取的段数量相等,位置互补。所以1和n的连接处都选或都不选都会有不被包括的情况,一选一不 阅读全文
posted @ 2017-06-27 20:13 ONION_CYC 阅读(481) 评论(0) 推荐(0)
摘要:【算法】贪心 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn=50010; struct cyc{int num,value;}b[m 阅读全文
posted @ 2017-06-20 20:49 ONION_CYC 阅读(153) 评论(0) 推荐(0)
摘要:【算法】贪心 【题解】比较经典,用l,r两个定位指针分别从左右向中间推进。 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=10010; int n,m,a[maxn 阅读全文
posted @ 2017-06-19 16:51 ONION_CYC 阅读(176) 评论(0) 推荐(0)
摘要:【算法】离散化+树状数组(求逆序对) 【题解】经典,原理是统计在i之前插入的且值≤i的个数,然后答案就是i-getsum(i) #include<cstdio> #include<algorithm> #include<cstring> #define lowbit(x) x&(-x) using 阅读全文
posted @ 2017-05-28 18:28 ONION_CYC 阅读(325) 评论(0) 推荐(0)
摘要:【算法】排序 #include<cstdio> #include<algorithm> using namespace std; int n,a[50010]; int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); 阅读全文
posted @ 2017-05-26 19:11 ONION_CYC 阅读(166) 评论(0) 推荐(0)
摘要:【算法】三分+贪心 【题解】 数据范围小的版本:餐巾计划 这题不是使用最小费用流的下凸函数,因为这题是要满足最大流,那么这题到底在三分什么? 三分的这个函数,其实是总费用随卖出玩具量变化而变化的函数,此时的流量一直是满流的。可以想象一下,当卖出玩具的流量在总流量中占比小时,许多都得洗,花费巨大;继续 阅读全文
posted @ 2017-04-27 10:01 ONION_CYC 阅读(325) 评论(0) 推荐(0)
摘要:【算法】树链剖分+线段树(区间加值,区间求和) 【题解】http://hzwer.com/3891.html 中间不要取模不然相减会出错。 血的教训:线段树修改时标记下传+上传,查询时下传。如果修改时标记不下传,下面的结果就会覆盖上面的标记上传造成的影响。 读入后全部排序(离线处理) 链剖之后按顺序 阅读全文
posted @ 2017-04-23 00:03 ONION_CYC 阅读(186) 评论(0) 推荐(0)
摘要:【算法】二分+有源汇上下界可行流 【题解】上下界 题解参考:[BZOJ2406]矩阵(二分+有源汇有上下界的可行流) #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int inf=0 阅读全文
posted @ 2017-04-18 16:54 ONION_CYC 阅读(493) 评论(0) 推荐(0)
摘要:【算法】二分+spfa 【题解】据说这个叫分数规划? 0-1分数规划 二分答案a,则对于任意的环有w/k≤a即w-ak≤0,若满足条件则a变小,否则a变大。 因为w=w1+w2+...+wk,所以变形为(w1-a)+(w2-a)+...+(wk-a)≤0。于是问题转化为在图中找负环。 不过由于spf 阅读全文
posted @ 2017-04-17 15:25 ONION_CYC 阅读(204) 评论(0) 推荐(0)