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

摘要:【算法】(manacher+贪心)||(manacher+DP+树状数组/线段树) 【题解】 manacher求回文串,后得到线段,做一点计算映射回原串线段。 然后问题转化为可重叠区间线段覆盖问题,可以贪心解决。 排序左端点,同一左端点取最长段,然后在此段中找到右端点最靠右的线段,线性更新并累加。 阅读全文
posted @ 2017-04-05 21:19 ONION_CYC 阅读(371) 评论(0) 推荐(0)
摘要:【算法】离散化 【题解】 答案一定存在于区间的左右端点、与区间左右端点距离0.5的点上 于是把所有坐标扩大一倍,排序(即离散化)。 让某个点的前缀和表示该点的答案。 初始sum=∑c[i] 在l[i]处加上a[i]-c[i],在r[i]+1处加上b[i]-a[i]。 从左到右计算sum并比较出最大值 阅读全文
posted @ 2017-01-22 16:19 ONION_CYC 阅读(213) 评论(0) 推荐(0)
摘要:【算法】贪心+堆 #include<cstdio> #include<algorithm> using namespace std; const int maxn=20010; int n,heap[maxn],sz; void heap_push(int x) { heap[++sz]=x;//新 阅读全文
posted @ 2016-12-22 21:05 ONION_CYC 阅读(305) 评论(0) 推荐(0)
摘要:【算法】贪心&&堆 【题解】反过来看就是合并任意两块木板,花费为木板长度之和。 显然从最小的两块开始合并即可,用堆(优先队列)维护。 经典DP问题石子归并是只能合并相邻两堆石子,所以不能贪心。 手写堆版本见http://www.cnblogs.com/onioncyc/p/6212840.html 阅读全文
posted @ 2016-12-19 21:48 ONION_CYC 阅读(225) 评论(0) 推荐(0)
摘要:【算法】二分查找 【题解】最小值最大化问题。 从1..l内二分枚举答案,将每个答案最少移开的石头数与最大移开数m比较。 精简写法学自:https://vijos.org/p/1981/solution(核糖核酸) #include<cstdio> #include<algorithm> using 阅读全文
posted @ 2016-09-27 20:58 ONION_CYC 阅读(471) 评论(0) 推荐(0)
摘要:【题意】给定n个点的有向图,求可达点对数(互相可达算两对,含自身)。n<=2000。 【算法】强连通分量(tarjan)+拓扑排序+状态压缩(bitset) 【题解】这题可以说非常经典了。 1.强连通分量(scc)内所有点可互达,对答案的贡献为cnt[i]*cnt[i](cnt[i]第i个scc内点 阅读全文
posted @ 2016-09-21 21:07 ONION_CYC 阅读(436) 评论(0) 推荐(0)
摘要:【算法】模拟 #include<cstdio> const int maxn=45; int n,a[maxn][maxn]; int main() { scanf("%d",&n); int x=1,y=n/2+1; a[x][y]=1; for(int i=2;i<=n*n;i++) { if( 阅读全文
posted @ 2016-09-20 13:27 ONION_CYC 阅读(236) 评论(0) 推荐(0)
摘要:【算法】线段树||二分+前缀和 【题解】线段树记录区间加值和区间最大值。 #include<cstdio> #include<algorithm> using namespace std; const int maxn=1e6; struct treess{int l,r,ms,delta;}t[m 阅读全文
posted @ 2016-09-05 13:07 ONION_CYC 阅读(291) 评论(0) 推荐(0)
摘要:【题意】 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右 手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排 成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每 位大臣获得的金币数分别是:排在该大臣前面的所有人的 阅读全文
posted @ 2016-08-14 11:41 ONION_CYC 阅读(382) 评论(0) 推荐(0)
摘要:【算法】模拟 #include<cstdio> #include<cstring> const int maxm=1010; char sm[maxm],key[maxm],s[maxm]; int len,lenk; bool isbig(char c) {return c>='A'&&c<='Z 阅读全文
posted @ 2016-08-14 09:14 ONION_CYC 阅读(340) 评论(0) 推荐(0)
摘要:【算法】动态规划+后缀表达式 【题解】 先把算式转为后缀表达式后进行DP 令f[s][0]表示使表达式答案为0的方案数 f[s][1]表示使表达式答案为1的方案数 (加法) f[a+b][1]=f[a][0]*f[b][1]+f[a][1]*f[b][0]+f[a][1]*f[b][1] f[a+b 阅读全文
posted @ 2016-08-13 20:23 ONION_CYC 阅读(1119) 评论(1) 推荐(1)
摘要:【算法】DP||贪心 【题解】 (1)动态规划: 令f[i][0..1]为两种条件下前i株花的最大保留数量,状态转移方程: f[i][0]=max(f[j][1]+1) (j=i-1...1)(h[i]>h[j]) f[i][1]=max(f[j][0]+1) (j=i-1...1)(h[i]<h[ 阅读全文
posted @ 2016-08-13 09:13 ONION_CYC 阅读(652) 评论(0) 推荐(0)
摘要:【算法】贪心 【题解】如果看重一对,先选择其中一个点,该点相邻最大的肯定被选走。所以答案就是最大的[所有点的次大连边点]啦。 #include<cstdio> #include<algorithm> #include<cmath> #include<cctype> #include<cstring> 阅读全文
posted @ 2016-08-12 21:27 ONION_CYC 阅读(290) 评论(0) 推荐(0)
摘要:【算法】 【算法】网络流 【算法】树 【算法】数学 ————【专题】生成树计数(矩阵树定理) ————【专题】计数问题(排列组合,容斥原理,卡特兰数) ————【算法专题】卡特兰数(计数数列) ————【专题】数论 ————【专题】概率和期望 【算法】动态规划 【算法】数据结构 ————【专题】平衡 阅读全文
posted @ 2016-08-10 21:08 ONION_CYC 阅读(2138) 评论(0) 推荐(6)
摘要:Day1 T1(暴力):大水题 #include<cstdio> const int ok[5][5]={ 0,0,1,1,0, 1,0,0,1,0, 0,1,0,0,1, 0,0,1,0,1, 1,1,0,0,0, }; int a[210],b[210]; int main() { int n, 阅读全文
posted @ 2016-08-10 08:20 ONION_CYC 阅读(425) 评论(0) 推荐(2)