08 2017 档案
摘要:先是线段树 可以知道mex(i,i),mex(i,i+1)到mex(i,n)是递增的。 首先很容易求得mex(1,1),mex(1,2)......mex(1,n) 因为上述n个数是递增的。 然后使用线段树维护,需要不断删除前面的数。 比如删掉第一个数a[1]. 那么在下一个a[1]出现前的 大于a
阅读全文
摘要:1. 相关定义 在数学里,区间通常是指这样的一类实数集合:如果x和y是两个在集合里的数,那么,任何x和y之间的数也属于该集合。区间有开闭之分,例如(1,2)和[1,2]的表示范围不同,后者包含整数1和2。 在程序世界,区间的概念和数学里没有区别,但是往往有具体的含义,例如时间区间,工资区间或者音乐中
阅读全文
摘要:A:贪心DFS 先从最远的搜起 如果一个点的value>=2 就ans++ D:并查集 E:大模拟 F:快速幂 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL, LL > pLL;
阅读全文
摘要:A:签到题 C:模拟搜索题 #include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #include<queue> #define EPS 1.0e-9 #define PI acos(
阅读全文
摘要:A:签到题 B!:搜索+DP #include<bits/stdc++.h> #define mp make_pair #define pi pair<int,int> using namespace std; const int dx[4]={-1,1,0,0}; const int dy[4]=
阅读全文
摘要:N个数(N<=100000),M个询问,每次询问L,R,求F(L,R)。 F(L,R)=F(L,R-1)%A[R] , L<R 这道题数据比较鶸 可以直接用递减爆 正确做法应该是倍增 用倍增的思想,对于位置i右侧的最长下降子序列,next[i][j]表示位置i右边第2j个的位置,预处理出每个位置的n
阅读全文
摘要:下面是一个最基础的LCA题目 http://poj.org/problem?id=1330 赤裸裸的 题意 输入cas 后 有cas组数据 输入 n 再输入n-1 条边 之后输入x y 问x y的最近公共祖先是什么 之后来个加强版 http://acm.hdu.edu.cn/showproblem.
阅读全文
摘要:首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。
阅读全文
摘要:1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 5 const int maxn=2e5+15; 6 const int mxn=5e3+15; 7 struct node 8 { 9 int t;i
阅读全文
摘要:hdu 1233 #include<stdio.h> #include<algorithm> using namespace std; struct dis { int a, b, c; } s[10010]; int cmp(dis x, dis y) { return x.c < y.c; }
阅读全文
摘要:1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。这两个问题是在实际应用中经常遇到的问题,下面介绍一下解决这两种问题的比较高
阅读全文
摘要:题意:定义F(a,0) = 0,F(a,b) = 1 + F(a,b - GCD(a,b)。给定 x 和 y (<=1e12)求F(x,y)。 题解:a=A*GCD(a,b) b=B*GCD(a,b),那么b-GCD(a,b) = (B-1)*GCD(a,b),如果此时A和B-1依然互质,那么GCD
阅读全文
摘要:先算出每个数的pop1(twonum),pop(fivenum)然后DP ans[i][j]表示选i个数有j个2时最多有多少个5 转移方程是 AC程序:
阅读全文
摘要:树形DP 求树的重心,即选择一个结点删去,使得分出的 若干棵树的结点数 的最大值最小
阅读全文
摘要:设dp[i][j]表示以j开头的,长度为i的排列的数目。 从字符串的后面到前面DP就得出答案了。 #include #include #include #include using namespace std; const int MAXN=1010; const int MOD=1000000007; char str[MAXN]; int dp[MAXN][MAXN]; int main()...
阅读全文
摘要:A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元
阅读全文
摘要:A:二分答案 如果中位数比目前的大就right=mid-1 else left=mid+1 C!:几何 G:优先队列贪心 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<LL, int>
阅读全文
摘要:A:正着DFS一次处理出每个节点有多少个优先级比他低的(包括自己)作为值v[i] 求A B 再反着DFS求优先级比自己高的求C #include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #
阅读全文
摘要:A!:UESTC1752 B!:找区间内L到R之间内的数的个数 权值分块加莫队 C!:给你一个哈斯图 去掉其中的几条边 要求输出字典序最大的拓扑排序:线段树模拟拓扑排序 D!:要求你找到最短路树并输出 E:SG函数 F:求出偶数和奇数的个数套公式 G:要求你从两个set里找出符合要求两个数 找规律
阅读全文
摘要:给你一棵有向树,需要选定一个点为capital,满足翻转边数最小 思路:先求出1为capital 的答案,然后向下更新孩子节点 dp[i]=dp[i-1]+judge(i); #include<iostream> #include<cstdio> #include<cstring> #include
阅读全文
摘要:UVa 10328 - Coin Toss 题意:给你一个硬币,抛掷n次,问出现连续至少k个正面向上的情况有多少种。 转换成抛N次至多连续有N个减去抛N次至多连续有K-1个1的情况 dp[i][k]表示抛i次至多连续有k个1的情况数; 转移方程:i<=k的时候有dp[i][k]=dp[i-1][k]
阅读全文
摘要:A D:用前面的H去消去后面的K 然后求最长连续的M F:在每一列/行里面求最大的数然后组成最大的和ans[]里的比求出最大的 L:并查集 J:DP背锅题 01背包 先求出M种里每种的size和last然后先last最大的放在最后 然后背包DP X[i]表示有i人在一个飞机上时的最小last 然后i
阅读全文
摘要:#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <cmath> #include <string> #include <cstdlib> #define maxn 10000
阅读全文
摘要:A!: GTY系列题 B!:莫队加分块 GTY系列题 C!:线段树模拟拓扑排序(把普通的拓扑排序的栈操作改成线段树区间减一,查询区间最右侧的0的位置即可。注意一开始就删除的边,在区间减后要单点加回来 然后当前的点处理完后,要把其置成无穷大) #include<cstdio> #include<cst
阅读全文
摘要:dp1:(1,1)到(i,j) dp2:(n,m)到(i,j) dp3:(1,m)到(i,j) dp4:(n,1)到(i,j) 因为除边界点之外所有点都有可能是相遇点 而且要使相遇仅发生一次那么单体在相遇点前的方向和后的方向相同 各自不同 只有2种可能
阅读全文
摘要:#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <math.h> __int64 *primarr, *v; __int64 q = 1, p = 1; //π(n) __in
阅读全文
摘要:void Solve(LL n) { p.clear(); for(LL i=2; i*i1) p.push_back(n); //这个不可以缺少 }
阅读全文
摘要:A:水 B:求两个三角形之间的位置关系:相交 相离 内含 ①用三个点是否在三角形内外判断 计算MA*MB、MB*MC、MC*MA的大小 若这三个值同号,那么在三角形的内部,异号在外部 #include<stdio.h> #include<math.h> #include<string.h> #inc
阅读全文
摘要:#include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f3f #define MOD 1000000007 #define mem(a,b) me
阅读全文