算法竞赛进阶指南
文章平均质量分 54
wwt9b15bs
这个作者很懒,什么都没留下…
展开
-
【题解】CH0101 位运算 快速幂
快速幂模板题(最后答案再模一个P)#include<cstdio>typedef long long ll;ll qpow(ll a,ll b,ll mod){ ll ret=1; while(b) { if(b&1)ret=((ret%mod)*(a%mod))%mod; b>&原创 2018-08-20 07:27:23 · 592 阅读 · 0 评论 -
【题解】CH0102 位运算
题目链接 类似于快速幂的思想#include<cstdio>typedef unsigned long long ull;ull qmul(ull a,ull b,ull p){ ull ret=0; while(b) { if(b&1)ret=(ret%p+a%p)%p; b>>=1;原创 2018-08-20 07:27:29 · 346 阅读 · 0 评论 -
【题解】CH0201 枚举+位运算
题目链接 参考了算法竞赛进阶指南和大佬博客 枚举第一行的点击方法,采用位运算的方式,枚举0~31,若第k位为1,就点击01矩阵第一行第k+1列的数字#include<cstdio>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i+原创 2018-08-20 07:27:33 · 579 阅读 · 0 评论 -
【题解】poj1995 位运算 快速幂
题目链接 快速幂模板题,注意爆int#include<cstdio>typedef unsigned long long ull;int qpow(int a,int b,int mod){ int ret=1; while(b) { if(b&1)ret=(ull)ret%mod*(ull)a%mod; b&...原创 2018-08-20 07:27:37 · 222 阅读 · 0 评论 -
【题解】poj1958 递推
题目链接 处理4座塔的汉诺塔问题之前,首先考虑3座塔的经典汉诺塔问题。设d[n]表示求解该n盘3塔问题的最少步数,显然有d[n]=2*d[n-1]+1,即把前n-1个盘子从A柱移动到B柱,然后把第n个盘子从A柱移动到C柱,最后把前n-1个盘子从B柱移动到C柱。 设f[n]为求解4塔问题所需最少步数,则f[n]=min{2*f[i]+d[n-i]}其中f[1]=1。 先在4塔模式下把i个盘子移...原创 2018-08-23 07:11:31 · 228 阅读 · 0 评论 -
【题解】poj3190 贪心+堆优化
题目链接 按照开始吃草的时间把牛排序。用一个小根堆维护每个畜栏最后一头牛结束吃草的时间,尝试把当前的牛安排在堆顶#include<cstdio>#include<algorithm>#include<queue>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++原创 2018-08-27 15:53:19 · 229 阅读 · 0 评论 -
【题解】poj1328 贪心
题目链接 对于每个区间,优先选择已有的监控设备管辖它 如果当前区间左端点大于最后一台监控设备右端点,新增一台设备,否则更新最后一台监控的位置#include<cstdio>#include<cmath>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);...原创 2018-08-27 15:53:27 · 155 阅读 · 0 评论 -
【题解】洛谷P1080国王游戏[NOIP2012Day1T2] 贪心
题目链接 按照每个大臣左右手上的数的乘积从小到大排序,就是最优排队方案 可以使用微扰证明,详见李煜东的算法竞赛进阶指南#include<cstdio>#include<algorithm>#include<cstring>using namespace std;struct node{ int a,b,c;}q[2000];int a...原创 2018-08-27 15:53:37 · 376 阅读 · 0 评论 -
【题解】洛谷P2280[HNOI2003]激光炸弹 前缀和
题目链接 预处理二维前缀和#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define INF 0x3f3f3f3f#define _rep(i,a,b) for(int i=(a);i<=(b);i++)int n,r,x,y,v;i原创 2018-08-23 07:11:36 · 226 阅读 · 0 评论 -
【题解】poj3263 前缀和
题目链接 建立一个数组C,初始化全为0,将下标a+1到b-1的位置全部-1,用一个数组d,d[a+1]-1,d[b]+1(“身高减小1的影响从a+1开始到b结束”)时间复杂度o(n+m) map判断是否重复#include<cstdio>#include<map>#include<algorithm>using namespace std;#de...原创 2018-08-23 07:11:41 · 423 阅读 · 0 评论 -
【题解】CH0301 递归实现指数型枚举
题目链接#include<cstdio>#include<vector>using namespace std;int n;vector<int>chosen;void calc(int x){ if(x==n+1) { for(int i=0;i<chosen.size();i++) p原创 2018-08-24 07:46:00 · 418 阅读 · 0 评论 -
【题解】CH0302 递归实现组合型枚举
题目链接#include<cstdio>#include<vector>const int N=1e5+10;using namespace std;int n,m;vector<int>chosen,ans[N];int cnt=0;void calc(int x){ if(chosen.size()>m||chosen.si原创 2018-08-24 07:46:04 · 306 阅读 · 0 评论 -
【题解】CH0303 递归实现排列型枚举
题目链接#include<cstdio>#include<vector>using namespace std;vector<int>pl;bool chosen[11];int n;void calc(int x){ if(x==n+1) { for(int i=0;i<pl.size();i++)原创 2018-08-25 06:02:49 · 357 阅读 · 0 评论 -
【题解】hdu4699 对顶栈
题目链接 对于I x 操作: 1.把x插入栈A; 2.更新sum[pa]=sum[pa-1]+a[pa]; 3.更新f[pa]=max(f[pa-1],sum[pa])。 对于D操作,把A的栈顶出栈。 对于L操作,弹出A的栈顶,插入到B中。 对于R操作: 1.弹出B的栈顶,插入到A中。 2.更新sum[pa]=sum[pa-1]+a[pa]; 3.更新f[pa]=max(f[p...原创 2018-08-27 15:53:45 · 236 阅读 · 0 评论 -
【题解】CH0601 倍增
题目链接 初始化p=1,r=l,求出[l,r+p]这一段区间的“校验值”,若“校验值”≤t,则r+=p,p*=2,否则p/=2,直到p等于零 每次排序时只对新增序列排序,然后合并新旧两段。 代码调试很久不过,去参考了大佬博客,讲解很详细#include<cstdio>#include<cstring>#include<algorithm>us...原创 2018-08-27 15:53:56 · 233 阅读 · 0 评论 -
【题解】poj1845 递归
题目链接 分治法递归求解#include<cstdio>#include<cmath>const int mod=9901;inline int qpow(int a,int mi){ int ret=1; a=a%mod; while(mi) { if(mi&1)ret=ret%mod*a%mod;...原创 2018-08-25 06:02:54 · 220 阅读 · 0 评论 -
【题解】poj3889 递归
题目链接 大佬博客写的很好思路摘抄如下: 1.当前编号小于上一级编号总数时 该情况说明当前编号是在n级分形图的左上角, 但是左上角分形图是n-1级分形图逆时针旋转90度得到的 顾我们带入递归式时,需要将x和y,倒一下不明白的同学可以这样看: 第1级道路:(1,1)->(1,2)->(2,2)->(2,1) 第2级道路左上角:(1,1)-&gt...转载 2018-08-25 06:02:58 · 418 阅读 · 0 评论 -
【题解】poj2054 复杂的贪心
题目链接 大佬博客的讲解非常详细,学习了 详细思路见上方博客或者李煜东《算法竞赛进阶指南》#include<cstdio>#include<cstring>#include<vector>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)#define _原创 2018-08-27 15:54:10 · 367 阅读 · 0 评论 -
【题解】CH1101 栈+vector
#include<cstdio>#include<stack>#include<vector>using namespace std;int n,cnt;vector<int>vx;void dfs(stack<int&a原创 2018-08-27 15:54:17 · 280 阅读 · 0 评论 -
【题解】poj2559 单调栈
题目链接 我们建立一个栈,用来保存若干个矩形,这些矩形的高度是单调递增的。我们从左至右依次扫描每个矩形: 如果当前矩形比栈顶矩形高,直接进栈; 否则不断取出栈顶,直至栈为空或者栈顶矩形的高度比当前矩形小。在出栈过程中,我们累计被弹出的矩形的宽度之和,并且每弹出一个矩形,就用它的高度乘上累计的宽度去更新答案。整个出栈过程结束后,我们把一个高度为当前矩形高度、宽度为累计值的新矩形入栈 整个扫描...原创 2018-08-28 19:34:13 · 191 阅读 · 0 评论 -
【题解】poj3694 边双联通分量缩点+lca+并查集
题目链接 题目要我们求出每次操作后剩余桥的数量,可以想到首先将图中所有的割边统计并将所有e-DCC缩点得到一棵树。对于每次操作的u,v,考虑u,v是否属于同一e-DCC。显然属于的情况没有影响,而不属于则会使u,v所在e-DCC到lca的路径上的所有边为非割边。利用并查集的路径压缩可以跳过已经是非割边的树边,时间复杂度O(M+QlogN)#include<cstdio>#i...原创 2018-08-31 14:48:48 · 212 阅读 · 0 评论 -
【题解】poj1456 并查集+贪心
题目链接 贪心思想,按照利润大到小排序,优先安排。对于每个商品,在它能卖出的最晚时间卖出。可以用并查集来实现。建立一个关于“天数”的并查集。对于一个商品,如果在d天后过期,就查询d的树根r。如果r大于0,则安排在第r天卖出,令r为r-1的子节点。#include<cstdio>#include<algorithm>using namespace std;#d...原创 2018-09-01 08:13:26 · 332 阅读 · 0 评论 -
【题解】CH0805 二分
题目链接#include<cstdio>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)typedef long long ll;const int N=2e5+10;int t,n;struct node{ int s,e,d;}de[N];int main(){ //freopen("in.tx...原创 2018-09-04 09:11:46 · 289 阅读 · 0 评论 -
【题解】CH1201 单调队列
题目链接 右端点从前向后扫描,对每个i执行以下三个步骤: 1.判断队头决策与i的距离是否超出M的范围,若超出则出队。 2.此时队头就是右端点为i时,左端点j的最优选择。 3.不断删除队尾决策,直到队尾对应的S值小于s[i]。然后把i作为一个全新的决策入队。(李煜东《算法竞赛进阶指南》)#include<cstdio>#include<algorithm>...原创 2018-08-27 15:54:22 · 267 阅读 · 0 评论 -
【题解】洛谷P1955[NOI2015](同bzoj4195) 并查集+离散化
题目链接 对于每个相等的约束条件,合并所在集合;对于不等的约束条件,若两个变量处于同一集合内,则不可能被满足。#include<cstdio>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)#define _for(i,a,b) f...原创 2018-08-28 19:34:17 · 158 阅读 · 0 评论 -
【题解】poj3179 二维前缀和+离散化+枚举
题目链接 学习了大佬题解,还是有点迷……有点不清醒,以后再看吧#include<cstdio>#include<vector>#include<algorithm>#include<climits>using namespace std;#define _rep(i,a,b) for(int i=(a);i&转载 2018-09-04 09:12:21 · 663 阅读 · 0 评论 -
【题解】poj1723 排序
题目链接 学习了大佬博客,又是玄学的找中位数#include<cstdio>#include<algorithm>#include<cmath>using namespace std;#define _for(i,a,b) for(int i=(a);i<(b);i++)const int N=1e4+10;int n,mx,my,a转载 2018-09-04 10:42:18 · 352 阅读 · 0 评论 -
【题解】poj2018 二分
题目链接#include<cstdio>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const double eps=1e-6;const int N=1e5+10;int n,f;double a[N],b[N],sum[N]...原创 2018-08-26 22:36:14 · 471 阅读 · 0 评论 -
【题解】codeforces-670C.Cinema 排序+离散化+map
题目链接 把所有电影和人涉及的语言放进一个数组,排序并离散化,用一个1~2*m+n之间的整数代替每种语言#include<cstdio>#include<map>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)cons原创 2018-08-26 22:36:17 · 253 阅读 · 0 评论 -
【题解】洛谷P1196[NOI2002]银河英雄传说 带权并查集
题目链接 改了快一个小时过不了样例,交上去AC了……可能这就是权贵吧#include<cstdio>#include<cmath>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=3e4+10;int t;int fa[N],d[N],size[N...原创 2018-08-28 19:34:21 · 227 阅读 · 0 评论 -
【题解】poj1733 带权并查集
题目链接 d[x]为0表示奇偶性相同,为1表示奇偶性不同。 d[x]xor d[y]为x与y的奇偶性关系,若d[x]xor d[y]≠ans则矛盾#include<cstdio>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)cons...原创 2018-08-28 19:34:29 · 181 阅读 · 0 评论 -
【题解】CH0501 排序
题目链接#include<cstdio>#include<algorithm>#include<cmath>typedef long long ll;using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=1e5+10;ll a[N];原创 2018-08-26 22:36:23 · 362 阅读 · 0 评论 -
【题解】CH0502 排序
题目链接 二维环形石子合并#include<cstdio>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=1e5+10;原创 2018-08-26 22:36:26 · 196 阅读 · 0 评论 -
【题解】poj3784 对顶堆算法+排序+优先队列
题目链接 对顶堆算法 序列中从小到大排名为1~M/2的整数存储到大根堆中,序列中从小到大排名M/2+1~M的整数存储在小根堆中,小根堆堆顶就是序列中位数#include<cstdio>#include<queue>#include<algorithm>#include<vector>using namespace st原创 2018-08-26 22:36:30 · 209 阅读 · 0 评论 -
【题解】poj2299 树状数组求逆序对+离散化
题目链接//采用树状数组求逆序对 离散化 #include<cstdio>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int N=5e5+10;struct node{ int p,v;}q[N];int ...原创 2018-08-26 22:36:34 · 319 阅读 · 0 评论 -
【题解】hdu4864 贪心
题目链接#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=1e5+10;int n,m原创 2018-09-04 10:43:18 · 133 阅读 · 0 评论 -
【题解】poj3614 贪心
题目链接 按照minSPF递减的顺序排序,再选择可用的SPF最大的防晒霜#include<cstdio>#include<algorithm>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=2510; int c,l,ans;struct n...原创 2018-08-27 15:53:00 · 233 阅读 · 0 评论 -
【题解】CH1301 set
题目链接#include<cstdio>#include<set>#include<cmath>using namespace std;#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=1e5+10;int n,a[N],g[3],m,p;struct node{原创 2018-09-05 07:18:18 · 312 阅读 · 0 评论 -
【题解】CH4201楼兰图腾 树状数组
题目链接#include<cstdio>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)typedef long long ll;const int N=2e5+10;int n,y[N];ll left[N],right[N],tr[N<<1],ans1,ans2;inline int lowbit(in...原创 2018-09-06 07:44:50 · 263 阅读 · 0 评论 -
【题解】CH0503 树状数组+排序
题目链接#include<cstdio>#include<cstring>#define _rep(i,a,b) for(int i=(a);i<=(b);i++)const int N=3e5+10;int n;int a[N];inline int lowbit(int x){ return x&(-x);}inline vo...原创 2018-09-06 07:45:47 · 272 阅读 · 0 评论