03 2013 档案
摘要:A 简单DP,状态DP[I][J] 表示第I个时间位置为J的最小花费View Code #include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>const int INF = 0x3f3f3f3f;#define MIN(a,b) (a)<(b)?(a):(b)int dp[21][510];int val[21];int n, k;int main(){ while( scanf("%d%d", &n,&k) != EOF
阅读全文
摘要:题意 n*m的矩阵中,某些地区需要放置雷达,而雷达覆盖有四种方式,上下左右,问最少的雷达数量覆盖所有*号地区。解法 关于二分图的性质,有点晕头转向了。 和旭神讨论了。 这个题目是满足二分图的。因为对于一个雷达其关联的地方分别为上下左右,不能够斜线。则与雷达A关联的其它雷达间是不会有联系的。所以不会形成环。可以转换成2个集合间的关联关系。所以我们可以通过拆点法求出最大匹配。而有效顶点数量 = 最大匹配数 + 边覆盖数(最小边覆盖集)。同时也是本题的所求的边覆盖数,既最小雷达数量。View Code #include<cstdio>#include<cstdlib>#inc
阅读全文
摘要:题意 n*n的矩阵中,有空地和墙,放置机器人能攻击到垂直和水平地方(有墙则被隔绝),问最多能放多少机器人,相互之间不攻击解题思路 最大独立集, 对于实际顶点应该是除去墙。 然后贴模板~~ View Code #include<cstdio>#include<cstring>#define N 50bool flag[N], a[N][N];int ans, cnt[N], group[N], n, m, vis[N]; bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cn.
阅读全文
摘要:题意 给一个无向图,求其最大团中顶点数量。。。解题思路 跪了。。。这够裸了。。。 最大团模板。。View Code #include<cstdio>#include<cstring>#define N 51bool flag[N], a[N][N];int ans, cnt[N], group[N], n, m, vis[N]; bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cnt[i]+pos <= ans ) return 0; if( a[u][i]...
阅读全文
摘要:题目大意: 一个无向图中,使用黑白两种颜色对顶点着色,要求相邻顶点不能同时为黑色,求最大能染黑色顶点数量以及对应顶点。解题思路: 相邻顶点间有边相连,模型转换成求 无向图 最大独立集。因为是NP问题,目前没有有效算法。 又 最大团顶点数量 = 补图的最大独立集 所以我们可以用 优化的 Bron-Kerbosch算求其补图的最大团,然后得出当前图的最大独立集View Code #include<cstdio>#include<cstring>#define N 1010bool flag[N], a[N][N];int ans, cnt[N], group[N], n,
阅读全文
摘要:本文转载自http://www.felix021.com/blog/read.php?2040,如是转载文则注明原出处,谢谢:)Google Reader 订阅点击这里,RSS地址:http://www.felix021.com/blog/feed.php。源于这两篇文章:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palindrome
阅读全文
摘要:游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。 分析:这个问题与nim游戏的区别在于移走的硬币不是被扔掉而是被放进了另一堆硬币之中,考虑能否将这一部分楼梯排除考虑范围。奇数号楼梯只能将硬币扔到偶数号楼梯之中,同样偶数号楼梯上的硬币也只会被扔上奇数号楼梯。只考虑奇数号楼梯nim,若偶数楼梯只作容器,那么游戏变为nim。当偶数号楼梯上的硬币可以将硬币移出时,我们是不是仍然可以用nim的方法判断必败状态?将奇数台阶的硬币
阅读全文
摘要:刘雅琼PPT讲解链接:http://www.doc88.com/p-216945446450.html扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0<=i<lenA),求出A[i..lenA-1]与B的最长公共前缀长度,记为ex[i](或者说,ex[i]为满足A[i..i+z-1]==B[0..z-1]的最大的z值)。扩展KMP可以用来解决很多字符串问题,如求一个字符串的最长回文子串和最长重复子串。【算法】设next[i]为满足B[i..i+z-1]==B[0..z-1]的最大的z值(也就是B的自身匹配)。设目前next[0.
阅读全文
摘要:本文转载自:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9曾经看过如下一个公式:以上的公式如果第一次见到,难免有不少疑惑:为什么可以这么写?限制条件为什么是x >= Phi(C),这个公式为什么正确?今天突发奇想,在纸上YY以后得到了以下证明(个人证明,如果有问题欢迎提出)定理 1:对于一个数对(A,C) 必然存在一个最小的正整数 L,满足其中SPOS 是一个大于等于0的整数(下面具体介绍)我们称L 为(A,C) 的最小循环节长度证明:根据鸽巢原理,得到在x >= C 后必然出现循环,从而定理得证.定理 2:对
阅读全文
摘要:本文内容转载自Matrix67大神:http://www.matrix67.com/blog/archives/333除了字符串匹配、查找回文串、查找重复子串等经典问题以外,日常生活中我们还会遇到其它一些怪异的字符串问题。比如,有时我们需要知道给定的两个字符串“有多像”,换句话说两个字符串的相似度是多少。1965年,俄国科学家Vladimir Levenshtein给字符串相似度做出了一个明确的定义叫做Levenshtein距离,我们通常叫它“编辑距离”。字符串A到B的编辑距离是指,只用插入、删除和替换三种操作,最少需要多少步可以把A变成B。例如,从FAME到GATE需要两步(两次替换),从G
阅读全文
摘要:1. 概述同splay tree一样,treap也是一个平衡二叉树,不过Treap会记录一个额外的数据,即优先级。Treap在以关键码构成二叉搜索树的同时,还按优先级来满足堆的性质。因而,Treap=tree+heap。这里需要注意的是,Treap并不是二叉堆,二叉堆必须是完全二叉树,而Treap可以并不一定是。2. Treap基本操作为了使Treap 中的节点同时满足BST性质和最小堆性质,不可避免地要对其结构进行调整,调整方式被称为旋转。在维护Treap 的过程中,只有两种旋转,分别是左旋转(简称左旋)和右旋转(简称右旋)。左旋一个子树,会把它的根节点旋转到根的左子树位置,同时根节点的右子
阅读全文
摘要:#include<cstdio>#include<cstring>#define N 1010bool flag[N], a[N][N];int ans, cnt[N], group[N], n, vis[N];// 最大团: V中取K个顶点,两点间相互连接// 最大独立集: V中取K个顶点,两点间不连接 // 最大团数量 = 补图中最大独立集数 bool dfs( int u, int pos ){ int i, j; for( i = u+1; i <= n; i++){ if( cnt[i]+pos <= ans ) return 0; if( a..
阅读全文
摘要:训练专题以及解题思路... 持续更新 Train 1 搜索 Train 2 动态规划 Train 3 组合数学 Train 4 点分治 Train 5 最大流 Train 6 群论/置换群 Train 7 动态规划1 Train 8 动态规划2 Train 9 动态规划3 Train 10 动态规划4 Train 11 最大独立集与二分图匹配 A. 最大独立子集,用最大团模板即可,注意若不存在的特殊情况 B. 跪了,赤裸裸的最大团模板题 C. 最大独立集,去除掉墙壁的点,才是实际的图。注意模板的ans=-1,若为-1则手动设定为0.即不存...
阅读全文
摘要:A 错排公式 d[n] = (n-1)*(d[n-1]+d[n-2]);View Code #include<stdio.h>typedef long long LL;LL d[110];const int mod = 1e9+7;void init(){ d[1] = 0; d[2] = 1; for(int i = 3; i <= 100; i++){ d[i] = 1LL*(i-1)*(d[i-1]+d[i-2])%mod; } }int main(){ init(); int T; scanf("%d",&T); ...
阅读全文
摘要:---恢复内容开始---Bron-Kerbosch算法计算图的最大全连通分量(团clique)最大独立集: 顶点集V中取 K个顶点,其两两间无连接。最大团: 顶点集V中取 K个顶点,其两两间有边连接。最大团中顶点数量 = 补图的最大独立集中顶点数量补图定义: G=<V,E> thecomplementofG,\bar{G}=<V,V\timesV-E> 详见连接:http://zh.wikipedia.org/wiki/%E8%A3%9C%E5%9C%96 更详细的:http://en.wikipedia.org/wiki/Bron%E2%80%93Kerbos...
阅读全文
摘要:感谢其它高校的负责人,严格的审题等工作~~~。预祝大家本场训练赛玩的高兴。。。训练赛 RankList解题报告转摘自 Lyush A.简单的想法题。使用hash表或者是map存储所有数,然后从最小的数开始找从这个数开始的连续P倍数的个数X,那么需要删除的数的个数为X/2。View Code #include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <map>#include <cassert>#include <c
阅读全文
摘要:就做了签到题..... 菜的掉渣了..都... A 题....签到题,竟然搞晕了半天... 其实第三种操作, 因为 60*k - (60-x)*k = 0 (mod 43200) 转化成 x*k = 43200*B, 因为是浮点型, 直接求单位的 k = (43200/x)*K*60 sView Code #include<stdio.h>#include<stdlib.h>#include<string.h> typedef long long LL;int gcd( int a, int b ){ return b == 0 ? a : gcd( b,
阅读全文
摘要:题意 输入N (N <= 1e4), 求满足 的整数解 (x,y)的数量。解法 令 N! = M, 且分析等式可以知道, X > M, Y > M 假设 X = M + K , 其中K为正整数 则原式转换成: 又 Y 为正整数, M也为正整数, 则若需要满足条件则 M^2 % K == 0 则题目就转换成为 求 M^2 = ( N! )^2 的因子个数 又 对于任意正整数 其因子数量为 因为题目所给的 M = N! 对于 N! 的质因子分解,我们可以不需要从1到N进行枚举。仅仅通过N即可得出 [1,N] 的素因子及素因子次数。
阅读全文
摘要:在这里记录下比较有用的计算几何模板,以便于以后自己查找,持续更新坐标点数据类型struct Point{ double x, y; };已知三点,求外界圆心Point Cross( Point A, Point B, Point c ){ Point o; double a1 = B.x - A.x, b1 = B.y - A.y, c1 = a1*a1+b1*b1; double a2 = C.x - A.x, b2 = C.y - A.y, c2 = a2*a2+b2*b2; double d = a1 * b2 - a2 * b1; // det( AB,...
阅读全文
摘要:前言:关于区间最值问题的求解,我们一般采用线段树来维护区间最值,得到了O(NlogN)的算法。但对于区间第k值问题,我们应该如何解决呢?本文将介绍一种基于线段树思想衍生出来的新结构——划分树,来解决这个问题。1 划分树其实,划分树和线段树的区别并不大,可以归纳为两点: 1.1 划分树每一个区间[L,R]维护的是一个一维数组[L..R]。 1.2 划分树每一个根结点[L,R]中前[(R-L+1)/2]小的点组成左子树,后[(R-L+1)/2]大的点组成右子树。2 划分树求区间k值 我们首先修改一下思考方式,原问题变成在已经sorted的数列中找出第k个在区间[s,t]中的数字。 先给出一...
阅读全文
摘要:何冬州的百度空间Blog本文的另一版本:http://hi.baidu.com/wsktuuytyh/blog/item/396a934ac679680208f7ef2c.html信息革命先驱者/数学电脑爱好者注: wsktuuytyh 即何冬州 三字的五笔编码主页博客相册|个人档案|好友|个人中心|i贴吧写新文章素数计数公式全面拉丁化改写-小有改进-Meissel公式-梅塞尔-Lehmer公式-莱梅=勒梅尔-筛法三种形式-孟庆余公式2012年06月13日 星期三6:17本文标题:素数计数公式全面拉丁化改写-小有改进-Meissel公式-梅塞尔-Lehmer公式-莱梅=勒梅尔-筛法三种形式-孟
阅读全文
摘要:题意: N个城市,由N-1条边连接, 有A,B两人占领i城市,花费分别为 A[i], B[i]. 相邻的则花费减半,(A占领城市x,则与x连通的城市,A再占领则只要A[x]/2, B类似)解法: dp[i][j][k] : 表示占领第 i 座城市, j = 0 则为 A占领 j = 1 则为 B占领 k = 0 则全部花费一半 k = 1 则其子孙节点中存在全额花费的 若此时遍历完 子节点 v,后回到其父节点 u . 有如下情况 一 对于 dp[u][0][0] , 第u个城市,由A占领,且子孙节点中由A占领的都是付 一半花费,可能有的情况 1. 以u为根的子树,全部...
阅读全文
摘要:题目大意 链接http://acm.hdu.edu.cn/showproblem.php?pid=3397 在一个由N个0或1构成的序列上进行五种操作: 0 a b : 将区间[a,b]序列置为0 1 a b : 将区间[a,b]序列置为1 2 a b: 将区间[a,b]序列0,1互换 3 a b: 输出区间[a,b] 为1的数量和 4 a b: 输出区间[a,b] 连续1的最大长度解题思路 分析题目的5种操作, 对于 0, 1, 3 操作,可以理解为区间覆盖,然后区间求和。这个对于普通的线段树是很好做的。 对于 2,4 操作, 涉及到区间的旋转,以及子区间...
阅读全文
摘要:A小Q系列故事——为什么时光不能倒流 转换成秒后模拟即可View Code #include<stdio.h>#include<stdlib.h>int main(){ int T; scanf("%d", &T); while( T-- ){ int h1,m1,s1; int h2,m2,s2; int mod = 12*60*60; scanf("%d:%d:%d",&h1,&m1,&s1); scanf("%d:%d:%d",&h2,&m2,&s2
阅读全文
摘要:A小Q系列故事——电梯里的爱情 模拟,同一楼层下去的人不需要多次开门~~~View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>using namespace std;const int N = 110;int a[N],b[N], n;int main(){ int T; scanf("%d",&T); while( T-- ){ scanf("%d", &n); for(int
阅读全文
摘要:官方解题报告http://www.nbutoj.com/005/暂时在忙 OJ文档和源码检测,堆了几场报告没写,之后补上。给一句话跪了::死月敢不敢出难点,你们给他们定位多大难度他们就是多少水平。
阅读全文
摘要:A.跑步 二分枚举距离,然后构图用并查集判联通数量是否大与等于N,时间复杂度是 Nlog(N),因为所给坐标较大,注意求解距离时强制转换,防止溢出~View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<algorithm>#include<math.h>using namespace std;const int N = 510;const double esp = 1e-8;int n, m, st[N], rank[N];double dis[
阅读全文
摘要:官方解题报告http://blog.watashi.ws/1515/zojmonthly1010/A题 签到题,╮(╯▽╰)╭,因为 int -> char* 错了一次,还是很粗心。View Code #include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>using namespace std;const int N = 101100;char str[N];bool isch( char ch ){ if( (ch>='a'&
阅读全文
摘要:ACows and Primitive Roots 原根,目前只有暴力求解,看了百度百科才知道。因为 x < p, 且 p <= 2000View Code #include<stdio.h>#include<stdlib.h>int p;int pow( int x, int n ){ int res = 1; while( n ){ if( n&1 ) res = (res*x)%p; x = x*x%p; n >>= 1; } return res;}bool legal( int x ){ if( pow( x...
阅读全文
摘要:整个寒假+3月份 都在开发OJ,好久没写题解了。第一题Non-negative Partial Sums 解法一: 预处理前缀和 sum[N] , 对于通用序列 ( a(i+1), a(i+2), ... a(n), a(1) ... a(i) ),将其分为 ( a(i+1) ... a(n) ), ( a(1)...a(i) )\两段, 此循环是以 a(i+1) 为起始的序列, 若其所有前缀和要满足条件,则 Min{ sum(1)...sum(i) } + sum(n)-sum(i+1) >= 0 MIN{ sum(i+1)...sum(n) } - sum(i) >= ...
阅读全文

浙公网安备 33010602011771号