02 2013 档案
摘要:1 #!/usr/bin/python 2 # Author: Missa 3 4 b = [1]*10 5 #print b 6 for i in range(0,10): 7 print b[i], 8 for i in range(0,10): 9 print b[i]10 11 a = [[1000]*10]*1012 #print a13 for i in range(0,10):14 for j in range(0,10):15 print a[i][j],
阅读全文
摘要:http://codeforces.com/problemset/problem/276/C比赛的时候用的线段树。裸的吧。还wa了3次。。 1 //lazy_tag 2 //区间求和操作 3 #include <iostream> 4 #include <cstdio> 5 #include <cstring> 6 #include <cmath> 7 #include <algorithm> 8 using namespace std; 9 10 #define lson l,m,rt<<111 #define rson
阅读全文
摘要:给你一个n代表数字的位数,问你n位的数有多少的平方以987654321结尾。一个数的平方的最后n位只与原数的最后n位有关。所以先打表出sqrt(987654321)-->999999999的个数分布。 1 // File Name: 107.cpp 2 // Author: Missa 3 // Created Time: 2013/2/24 星期日 0:11:23 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<algorithm> 9 #i
阅读全文
摘要:题目大意是:给你坐标上一些点,然后你需要用一些边把他们连接起来,边有费用和长度,求总费用和总长度最小比值。 二分答案: 每边有两权值(a,b),求∑a/ ∑b最小的生成树. 设∑a/ ∑b=k --> ∑a=k*∑b --->a1+a2+...an = k*(b1+b2+..bn) ---->∑(ai-k*bi)==0 即边权变为a-k*b后求MST,看是否<0,如果<0则说明k太大了。>0说明k太小了。ps:有种迭代的方法。看没太懂。下次看。 1 // File Name: 2728.cpp 2 // Author: Missa 3 // Created
阅读全文
摘要:次小生成树讲的比较详细的:http://www.cppblog.com/MatoNo1/archive/2011/05/29/147627.aspx对于prim算法的三种特殊另外注意三种特殊情况:【1】图G不连通,此时最小生成树和次小生成树均不存在。判定方法:在扩展T的过程中找不到新的可以加入的边;【2】图G本身就是一棵树,此时最小生成树存在(就是G本身)但次小生成树不存在。判定方法:在成功求出T后,发现邻接矩阵中的值全部是无穷大;【3】图G存在平行边。这种情况最麻烦,因为这时代价最小的可行变换(-E1, +E2)中,E1和E2可能是平行边!因此,只有建立两个邻接矩阵,分别存储每两点间权值最小
阅读全文
摘要:hello world:1 print 'Hello World'就一行。。。python的第一个优点:简单。······················从第四章开始做些笔记,方便以后复习··············
阅读全文
摘要:约束条件 :f[i]表示前i块石头的能量总和。f[R]-f[L-1]>=Af[R]-f[L-1]<=Bf[i]-f[i-1]<=10000f[i]-f[i-1]>=-10000关于为什么是字典序。。。在网上看到如下:总结了一下,差分约束系统有两个解决方案:1,最短路模型。所有的约束条件都是形如f(X)<=f(Y)+B,B正负不分。这样在有向图中addEdge(Y,X,B)这条边,这样根据最短路求解的性质我们可以得到X的最短路值满足了所有的f(X)<=f(Yi)+Bi,并且使得某个(某些)f(X)=f(Yk)+Bk。本来是f(X)<=f(Yk)+Bk的,
阅读全文
摘要:设a[i] 为第i个营的人数,s[i] = a[1] + a[2] + … + a[i], s[0] = 0 则对于题目 Ci 有: 0 <= s[i] – s[i-1] <= a[i] -----(1) i, j, k有:a[i]+a[i+1]+...a[j]>= s[j] – s[i-1] >= k -----(2) 化为以下四个式子:s[i]-s[i-1]<=a[i] ------>addedge(i-1,i,a[i])s[i-1]-s[i]<=0 --------->addedge(i,i-1,0)s[j]-s[i-1]<=sum[
阅读全文
摘要:以前用线段树做过这题。dis[i]表示从0->i-1这i个数存在多少个数。则有dis[b+1]-dis[a]>=c;dis[i+1]-dis[i]>=0 && dis[i+1]-dis[i]<=1转换成为:dis[a]-dis[b+1]<=-c;dis[i]-dis[i+1]<=0dis[i+1]-dis[i]<=1建图。dis[en]-dis[st]<=w.View Code 1 // File Name: 1508.cpp 2 // Author: Missa 3 // Created Time: 2013/2/20 星期三
阅读全文
摘要:开始的时候想的是bfs。对于每个砖头step+2,然后wa了。看了discuss明白了。这样的话就相当于别的方向只走了一步,而砖头的这个方向是两步,不符合搜索的公平性。然后把queue换成priority_queue就ac了。数据:8 10YEEEEEBBBBBBBEEEEEEEBBBBBBEEEEBBBBREEEEEEEEEEEBBBBBBBBBBBEEEEEEEEEEEEEBBBBBEEEET1710 10YEEEEEBBBBBBBEEEEEEEBBBBBBEEEERRRRBBBBBEBBEERSSSEEBBBBREEEEEEEEEEEBBBBBBBBBBBEEEEEEEEEEEEEBBB
阅读全文
摘要:约瑟夫环问题http://www.cnblogs.com/alex4814/archive/2011/09/11/2173739.html约瑟夫问题:用数学方法解的时候需要注意应当从0开始编号,因为取余会等到0解。实质是一个递推,n个人中最终存活下来的序号与n-1个人中存活的人的序号有一个递推关系式。分析:假设除去第k个人。0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 //original sequence (1)0, 1, 2, 3, ..., k-2, , k, ..., n-1 //get rid of kth person (2)k, k+1, ...
阅读全文
摘要:墙上有一面黑板,现划分为多个矩形,每个矩形都要涂上一种预设颜色C。由于涂色时,颜料会向下流,为了避免处于下方的矩形的颜色与上方流下来的颜料发生混合,要求在对矩形i着色时,处于矩形i上方直接相邻位置的全部矩形都必须已填涂颜色。在填涂颜色a时,若预设颜色为a的矩形均已着色,或暂时不符合着色要求,则更换新刷子,填涂颜色b。问最少需要的刷子次数(相同的颜色在不同的时间需要算多次。。自己应该想的清楚怎么回事吧。。。)。利用dfs来枚举吧。。。情况不多。View Code 1 // File Name: 1691.cpp 2 // Author: Missa 3 // Created Time: ...
阅读全文
摘要:证明:最大独立数=未匹配的节点+匹配数/2 (1)(设n=匹配数/2,可以理解为去掉二分图某侧匹配好的n个节点,在另一侧对应的n个节点就没有相匹配的了)而 未匹配的节点=顶点数-匹配数 (2)由(1)(2)得: 最大独立数=顶点数-匹配数的一半 1 // File Name: 1466.cpp 2 // Author: Missa 3 // Created Time: 2013/2/11 星期一 20:24:26 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include&
阅读全文
摘要:1 // File Name: 2060.cpp 2 // Author: Missa 3 // Created Time: 2013/2/11 星期一 17:11:30 4 5 //最小路径覆盖数=顶点数-二分图最大匹配数 6 #include<iostream> 7 #include<cstdio> 8 #include<cstring> 9 #include<algorithm>10 #include<cmath>11 #include<queue>12 #include<stack>13 #includ
阅读全文
摘要:构图有点意思。。没想到。。下面是构图:把行里面连在一起的坑连起来视为一个点,即一块横木板,编上序号,Sample则转化为:1 0 2 00 3 3 34 4 4 00 0 5 0把这些序号加入X集合,再按列做一次则为:1 0 4 00 3 4 52 3 4 00 0 4 0将 每一个 湿地的点 按其分配的行列 号 连边 ,如(i,j)为湿地 ,则用 其分配的 行 ——》 列,这样,我们求的就是 ,最小点覆盖。View Code 1 // File Name: 2226.cpp 2 // Author: Missa 3 // Created Time: 2013/2/10 星期日 23:...
阅读全文
摘要:题意:两台机器 A, B。初始状态为0 工作模式。k项任务,其中第 i 项工作可由 A 机器的 mode_x 或者 B 机器的 mode_y 来完成。不过机器转换模式需要手动操作。给出 k 项工作的要求,请求出完成 k 项工作最小需要的操作时。思路:第 i 项工作可由 A 机器的 mode_x 或者 B 机器的 mode_y 来完成,最小的操作数,一定是使用最少数量的机器模式,这些模式能完成所有的工作。以此为构图思路,将工作做边,模式做点,将问题转化为最小点覆盖集问题,而最小点覆盖集 = 最大匹配数。黑书上的例题,证明如下:(1) M个是足够的。只需要让它们覆盖最大匹配的这M条边,则其他边一定
阅读全文
摘要:参见:http://www.cnblogs.com/acSzz/archive/2012/10/17/2728461.htmlView Code 1 // File Name: 3487.cpp 2 // Author: Missa 3 // Created Time: 2013/2/8 星期五 10:43:21 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<algorithm> 9 #include<cmath> 10 #includ
阅读全文
摘要:将所有的点按所属的party分为1 2.然后分别求出源点 跟终点到各自的图中的最短路。枚举得出答案。View Code 1 // File Name: 3767.cpp 2 // Author: Missa 3 // Created Time: 2013/2/7 星期四 20:40:32 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<algorithm> 9 #include<cmath> 10 #include<queue>
阅读全文
摘要:floyd的核心思想就是动态规划从k=0->n来松弛i->j的路径,因为floyd的外层到k时,i->j的最短路上肯定没有k。所以我们可以先找环,再更新。如果存在的话,那么肯定是i->j 然后j->k->i。这样保证了i->j这条路不经过k。View Code 1 // File Name: 1734.cpp 2 // Author: Missa 3 // Created Time: 2013/2/7 星期四 16:39:58 4 5 #include<cstdio> 6 #include<cstring> 7 using na
阅读全文
摘要:题意:有n只猫咪,开始时每只猫咪有花生0颗,现有一组操作,由下面三个中的k个操作组成:1. g i 给i只猫咪一颗花生米2. e i 让第i只猫咪吃掉它拥有的所有花生米3. s i j 将猫咪i与猫咪j的拥有的花生米交换现将上述一组操作做m次后,问每只猫咪有多少颗花生?解题报告:http://www.cnblogs.com/acSzz/archive/2012/08/20/2648087.htmlView Code 1 // File Name: 3735.cpp 2 // Author: Missa 3 // Created Time: 2013/2/7 星期四 12:35:55 ...
阅读全文
摘要:题目大意: 给定一个n(n<=100)个点的有向图,问:Q1、最少需要选择多少个点,使得从这些点出发能遍历完整个图; Q2、最少需要添加多少条有向边,使得整个图成为强连通图; 分析: 求出强连通分量后进行缩点,得到每个强连通分量的入度in[],出度out[]; Q1:入度为0的强连通分量个数; Q2:max(入度为0的强连通分量个数,出度为0的强连通分量个数); 注意的地方:假如原图就是一个强连通图。则显然Q2是0.kosaraju:View Code 1 // File Name: 1236.cpp 2 // Author: Missa 3 // Created Tim...
阅读全文
摘要:题意:n头奶牛,给出若干个欢迎关系a b,表示a欢迎b,欢迎关系是单向的,但是是可以传递的,如:a欢迎b,b欢迎c,那么a欢迎c 。另外每个奶牛都是欢迎他自己的。求出被所有的奶牛欢迎的奶牛的数目.方法:对有向图求强连通分量,然后找出所有独立的强连通分量(所谓独立,就是该连通分量里面的点到外面的点没有通路,当然,连通分量外的点是可以有路到强连通分量内的点的),如果独立的强连通分量的数目只有一个,那么,就输出这个强连通分量内解的个数,否则输出无解。kosaraju:http://www.nocow.cn/index.php/Kosaraju%E7%AE%97%E6%B3%95View Code .
阅读全文
摘要:给你两颗二叉树,左右子树不可旋转,求这两个棵树相同的子树的个数。可以给每一种子树的形态一个编号,那么我们只要统计第一个颗树中每种形态的子树有多少个,然后把第二颗树中相同子树的数目与之相乘就可以了。我们可以设定叶子节点的形态编号为0,用一个map来存放hash值,而任何一个节点的哈希值都可用左右子树的形态编号形成的pair唯一表示。View Code 1 // File Name: 3602.cpp 2 // Author: Missa 3 // Created Time: 2013/2/5 星期二 11:47:26 4 5 #include<iostream> 6 #inclu..
阅读全文
摘要:好像是第一次用位运算。。。得习惯二进制。。还有就是p=0的时候。。。View Code 1 // File Name: 1164.cpp 2 // Author: Missa 3 // Created Time: 2013/2/2 星期六 23:08:26 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring> 8 #include<algorithm> 9 #include<cmath>10 #include<queue>11 #include<s
阅读全文
摘要:构图很有趣,我是把区域当成构图的点,然后floyd+枚举每个区域到所有会员的穿过墙的和。求出。开始wa是想错了一个地方。就是没看清题目给的区域点是按逆时针给出。。。然后竟然把一个区域的所有点都当成是可以连接的边了。。。囧。。其实很简单。。可是搞了很久。。View Code 1 // File Name: 1161.cpp 2 // Author: Missa 3 // Created Time: 2013/2/2 星期六 13:46:13 4 5 #include<iostream> 6 #include<cstdio> 7 #include<cstring>
阅读全文