01 2016 档案
摘要:double eps = 1e-10; struct P { double x, y; P(double x=0, double y=0):x(x), y(y) {} double add(double a, double b){ if(abs(a+b)<eps*(abs(a)+abs(b))) r
阅读全文
摘要:本题的意思就是构造一个凸包然后求出凸包的周长。代码如下: /* ID: m1500293 LANG: C++ PROG: fc */ #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include
阅读全文
摘要:这道题的意思的大意是给你一个有向图以及对应的边权, 求出源点到汇点的最小割, 要求边数最小,当变数相同的时候要求字典序最小。由于最多有1000条边, 因此我们给边权*1001+1这样求出最大流后mod1001就是最小割的边数, div1001就是最小割,求解最小割的边我们可以去掉一条边将新的最大流和
阅读全文
摘要:/* ID: m1500293 LANG: C++ PROG: ditch */ #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace
阅读全文
摘要:int ans[30], nans; //拓扑排序答案 //ex[i] i顶点的存在性//d[u][v]用领接矩阵存图//indeg 表示顶点入度 void dfs() { bool flog = 0; for(int i=1; i<=26; i++) if(ex[i]) { flog = 1; b
阅读全文
摘要:矩阵覆盖的题, 可以转化为拓扑排序。写这个拓扑排序废了好大的劲以后好好看看。代码如下: /* ID: m1500293 LANG: C++ PROG: frameup */ #include <cstdio> #include <algorithm> #include <cstring> using
阅读全文
摘要:这道题用广搜即可,只需要加两个优化就行。。 代码如下: /* ID: m1500293 LANG: C++ PROG: shuttle */ #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #inc
阅读全文
摘要:这个题的第一问的意思是让你求出从0 走到 N必须走的点集的集合, 第二问的意识是判断被一个点分开的两个子图有没有公共边, 对于第一问我们去掉i后如果发现无法从0走向N那么i就是要求得点, 第二问可以用种子填充, 如果发现有一些点被染到了两种颜色那么这个点就是不满足条件的点。代码如下: /* ID:
阅读全文
摘要:这个题的意思就是求出最长递减子序列的长度以及数量, 第一问很好求, 第二问要求得话会比较麻烦,我们令dp[i]为以i结尾的最长递减子序列的长度,dp1[i]为以i为结尾长度为dp[i]的子序列的个数,因为题意还要求子序列不能重复,现在思考不重复时的情况, 不重复的时候dp1[i]的计算方法是这样的,
阅读全文
摘要:这道题就是模拟工厂产品的生产过程, 题意如下, 有一种产品需要分别经过机器A和机器B通过,现在给定需要加工的产品的数量和机器A机器B的数量,以及一个机器加工一件产品所需要的时间, 求出机器A 和机器B 工作的最小时间。 由于机器可以同时加工因此我们考虑一个产品, 定义delay[0][j]为机器...
阅读全文
摘要:匈牙利算法可以求解最大匹配数, 其基本思路是不断地寻找增广路, 由于增广路肯定是奇数个边,并且非匹配边比匹配边多一条, 因此找到增广路以后调换匹配边和非匹配边的就可以使匹配边多一条, 不断重复这个过程即可。。模板如下: 第二次整理: struct Hungarian { int n; //顶点的数量
阅读全文
摘要:这个题的意思是有N个奶牛, M个围栏, 一个奶牛喜欢并且只会在某个围栏中产奶, 最多能使几个奶牛同时产奶?可以构造这样的一个图,这个图的源点指向每个奶牛, 每个奶牛指向自己喜欢的围栏, 每个围栏指向汇点, 求解一次最大流即可。代码如下:/* ID: m1500293 LANG: C+...
阅读全文
摘要:裸网络流最大流题, 我使用了EdmondsKarp算法来解决这个问题, 其中1是源点, m是汇点。代码如下:/* ID: m1500293 LANG: C++ PROG: ditch*/#include #include #include #include #include u...
阅读全文
摘要:这道题就是给你两个序列A,和B, 然后问你求出一个用最少的Ade子序列组成B的方法。。例如A = abc B = abccba, 那么就可以用两个A表示B, 一个是正的序列, 另外一个是负的序列。对于这个问题我们先做一个小小的转换,我们将A倒置变为A1,然后就是用递增的A和A1序列表示B,我们用...
阅读全文
摘要:首先我们将这个数化成唯一分解的形式, 也就是这样x = p1^a1*p2^a2*...pn^an, 我们定义答案为f(x),首先我们定义d(x)为x的约数的个数, 那么f(x) = x^(d(x)/2), 由费马小定理m为素数a^(m-1) == 1 (mod m) => a^x = a^x%(...
阅读全文
摘要:这道题就是计算三角形里面的格点的个数, 可以用匹克定理, s = n + b/2 - 1; 其中s是格点多边形的面积, n是多边形内部的格点数目, b是边界上的格点,假设有两个坐标(x1, y1) (x2, y2) b = gcd(abs(x1-x2), (y1-y2)).代码如下:/* ...
阅读全文
摘要:题目意思是有N首歌, M张光盘, 每张光盘的容量为T,现在要将这些歌曲按照时间顺序写入M张光盘中, 每首歌曲必须完整的存入一张光盘中,并且必须严格按照时间顺序写入, 问你这M张光盘最多可以容纳几首音乐?我们可以定义f[i][j]为前i个光盘写入1-j首歌的最大数量, 那么状态转移式子就可以写为f...
阅读全文
摘要:给你一颗数的中序和先序遍历求出后序遍历, 直接递归求解, 代码如下: /* ID: m1500293 LANG: C++ PROG: heritage*/#include #include #include using namespace std;char mid[50], ...
阅读全文
摘要:很好地一道博弈论基础题, 题目意思是给你一个序列, 两个玩家, 没个玩家可以从序列的开头或者末尾取一个数,问两个玩家都采取最优策略第一个玩家得分最多是多少?这个问题可以用动态规划解决,我们定义sum[i][j]为序列i-j的和, dp[i][j]为当前玩家采取最优策略的得分最大值那么dp[i][...
阅读全文
摘要:这道题的意思是地图上有一些骑士和一个国王, 骑士和国王要在一点会和,你可以选择一个骑士和国王在一点会和然后骑士会带着国王继续走, 问他们汇合的最少步数和是多少?考虑一个骑士当没有国王的时候可以很容易的求出他到每个点的最短路径a, 现在他要带着国王, 那么我们可以计算出他带着国王到某一点的最短路径...
阅读全文
摘要:直接用dp统计即可, 假设dp[i][j]是i, j为右下角的最大可用矩阵,那么dp[i][j] = min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) +1, 最后统计下答案即可。代码如下: /* ID: m1500293 LANG: C++ ...
阅读全文
摘要:完全背包多增加了几维而已, 直接贴代码:/* ID: m1500293 LANG: C++ PROG: shopping*/#include #include #include using namespace std;int s;struct FangAn{ int nu...
阅读全文
摘要:题目的意思就是给你一个图, 输出他的欧拉路(欧拉通路 或者 欧拉回路),无向图欧拉回路判断条件是:1:图连通 2:所有点的度数为偶数 无向图欧拉通路的条件是:1:图连通 2:有且只有两个点的度数为奇数, 不过寻找欧拉路的代码是一样的,学习了新的建图方法,代码如下:/* ID: m150...
阅读全文

浙公网安备 33010602011771号