随笔分类 -  OJ

摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815【题意】 n个题目,每题有各自的分数,A有50%的概率答对一道题目得到相应分数,B想要在至少P的概率上总分不低于A,问B至少要得到多少分。【分析】 最简单粗暴的做法是算出每个可能得到的总分的概率,原问题可以转化成在概率和=P。 但是计算所有可能的概率的复杂度是O(2n),不能满足我们的需求。细心分析可以发现问题可以分离出重叠子问题:f[i][j]表示前i个题目得到j分数的概率,于是类似背包问题,可以找出递推式: f[i][j]=f[i-1][j]*0.5 (score... 阅读全文
posted @ 2014-02-05 18:26 wuminye 阅读(539) 评论(0) 推荐(0)
摘要:链接:http://codeforces.com/problemset/problem/388/B【题意】 给出一个整数K,构造出刚好含有K条从1到2的最短路的图。【分析】 由于是要自己构造图,当然构造的方法很多了,需要考虑简单性和可行性。出于简单考虑,图中从1到2的所有路径都是最短路,为了保证路径长度一样,在构图时就需要分层次,使得每一层的点距离上一层的点的距离都是一个单位。 那么如何使得路径条数刚好为K呢,这里涉及到相邻层次的点的链接方式。比如说每个点和上一层的所有点都有链接,那么这样总的路径数就是每层点的个数乘起来,但是这很难保证乘起来的值刚好是K,于是想到进制数的方法,可以构造出不同底 阅读全文
posted @ 2014-02-05 09:53 wuminye 阅读(644) 评论(0) 推荐(0)
摘要:链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586【题意】 给出一个N 个和N-1条边的连通图,询问任意两点间的距离。N 3 #include 4 #include 5 #include 6 using namespace std; 7 int n,m; 8 struct edge 9 { 10 int d,v,next; 11 edge(){} 12 edge(int _d,int _v,int _next) 13 { 14 d=_d;v=_v;next=_next; 15 ... 阅读全文
posted @ 2014-01-19 20:37 wuminye 阅读(359) 评论(0) 推荐(0)
摘要:题目链接:http://www.codechef.com/JAN14/problems/SEAGRP【题意】 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1.【分析】 从结论入手,每个点的度恰好为1,那么就意味着每个点只能连接一个点,这样问题就转化为图中的点能否刚好两两配对。 对于奇数个点肯定是不行的,因为一定存在一个点不存在与之配对的点。 如果点是偶数,那么就要求这个图的最大匹配,看匹配树是否为点数的一半。 求匹配的方法和二分图类似,不断找增广路更新匹配数就好了。【代码】 第一次手写增广路代码~写的时候忘记判断增广路是否重点了于是WA了,还好后来想到了。 1 #inc 阅读全文
posted @ 2014-01-04 10:07 wuminye 阅读(562) 评论(0) 推荐(0)
摘要:题目链接:http://codeforces.com/problemset/problem/379/D【题目大意】 告诉你初始字符串S1、S2的长度和递推次数k, 使用类似斐波纳契数列的字符串合并的递推操作,使得最后得到的字符串中刚好含有x个"AC",现在要你构造出满足条件的S1和S2。【分析】 最终结果中有些"AC"可能是应为在合并时一个字符串的尾部和另一个字符串的首部合并而成,这就跟原始字符串的首尾字符有关,不同的情况在K次递推后多产生的"AC"数是不同的,所以这里既要枚举下初始串的首尾字符,计算出因合并产生的"AC&q 阅读全文
posted @ 2014-01-01 10:40 wuminye 阅读(331) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4424【题目大意】 给你N个点和N-1条边的连通图,也就是说任意两点间的路径是唯一的。每条边有个权值,从一点到另一点的最大流量是路径中所有边中权值的最小值。要你找一个点,使得这点到剩下所有点的最大流量之和最大,求这个最大流量和。【分析1:动态规划 】 假设现在有两个点的集合S1和S2,添加的一条边可以使得这两个集合连通起来,要求最大的流量之和,那么只有两种情况:1、选取的中心点在S1中;2、选取的中心点在S2中。设S中其最小权值的边为E,它连接S1、S2,假设中心点在S1,那么S2中所有的点要连接到中心点必然 阅读全文
posted @ 2013-08-28 15:02 wuminye 阅读(342) 评论(0) 推荐(0)
摘要:【题意】这个函数是给A求B的,现在给你B,问你是否能有A的解存在。【2-SAT解法】 对于每个A[i]的每一位运行2-sat算法,只要跑到强连通就可以结束,应为只要判断是否有解,后面拓扑求解就不需要了。构图和算法思想和基本的2-sat一致,详见我的2-sat博文。 1 #include 2 #include 3 inline int min(int a,int b){return a>b?b:a;} 4 struct edge 5 { 6 int v,next; 7 edge(int d=0,int n=-1):v(d),next(n){} 8 vo... 阅读全文
posted @ 2013-08-22 12:32 wuminye 阅读(772) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1890【题意】 给你n个数,每次将第i个位置到第i大的数所在位置之间的数进行翻转,模拟一种排序的操作,输出的是第i次操作第i大的数所在的位置。【分析】 这题和2012天津现场赛的K题类似,用Splay Tree 来记录节点间的相对左右关系,树的中序就是原数列。每个节点记录以自己为根的子树有多少个节点,这样就可以很快知道一个数的左边右多少树了。每次操作后要删除第i大数的节点,根据题目要求元素要用stable_sort排序,并记录节点指针地址,这样的话第i个答案就是i+path[i-1].t->l 阅读全文
posted @ 2013-08-16 16:16 wuminye 阅读(367) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4441题意:对于一个序列,每次有三种操作 insert pos 表示在pos插入一个数,这个数是最小的正数没有在序列中出现的。而且还要在某个位置插入他的相反数,使得这个序列满足队列的出入顺序(正表示进,负表示出) remove num 表示在序列中把num以及-num两数去掉 query num 把num与-num之间的数求和输出 这题我本来实在是没有思路,看起来像维护一个线段树,这样求和好办,但是序列的长度是会变的,而且元素的绝对位置是会变的,线段树就无法解决了。 通过这题我才了解了一个新的数据结构:Sp. 阅读全文
posted @ 2013-08-14 23:45 wuminye 阅读(448) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4435题目大意是给出N个二维坐标点代表N个城市,让你选择几个城市建加油站,使得能从1号城市出发遍历所有城市再回来,并且每加一次油的行驶距离为D,不能让车抛锚了。建立一个加油站需要一定的花费,现在要你求花费最少的建站方案。 题目有个突破口是在第i个城市建加油站的花费是2(i-1),花费刚好就是个N位的二进制,如果在第i位建站,费用比前i-1个城市都建站还高,所以这里可以用贪心,编号越高的城市能不建站就不建站,这样就能保证花费最小。确定能不能建站的方法是如果该城市不建站,从1出发存在一个路径使得能遍历所 阅读全文
posted @ 2013-08-08 12:14 wuminye 阅读(329) 评论(0) 推荐(0)
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4433这是一道2012年ACM天津赛区现场赛的题目,大意是给出两串数字,求用最少的转换次数将一串(A)变为另一串(B)。转换规则是:可以将连续的1到3位数字都加一或者减一(0-9的数字是循环的,0减一变9,9加一变0)本题的数字串的长度最大有1000,光用搜索是不行的了,正解是DPDP[i][j][k]表示前i-2个数字与目的串的相同,且第i-1位为j , 第i 位为k 的最小变换次数。那么状态的转移就是 DP[i][j][k]=min{DP[i-1][ X ][ Y ]+dis(A[i],K)} 阅读全文
posted @ 2013-08-05 16:43 wuminye 阅读(356) 评论(0) 推荐(0)
摘要:【题目大意】 有多个珠子,给出部分珠子之间的相对上下位置和间距,问你这些珠子在满足给出的条件下,是否能把珠子排列在一条竖直直线上,如果能,求出每个珠子距离最高的珠子的距离,珠子的位置可重叠。【分析】 可以根据珠子的位置关系建立一张有向图,A->B 为A比B高,权值为之间的距离。可以发现必须满足下列三种情况: 1、图有连通;无法比较出不同连通分支的上下关系。 2、有向图没有环;根据位置的传递关系,不可能自己比自己低。 3、如果从A到B有多条路径,路径的长度都应该一样;要不然B的位置关系就会有二义性。 我本来的想法是按顺序验证上面三条规则,把有向图转为无向图判联通,用拓扑排序判环,用DFS来 阅读全文
posted @ 2013-07-10 17:08 wuminye 阅读(606) 评论(0) 推荐(0)
摘要:【题目大意】 给你n个点,m条无向边,每条边有一定的距离数值,构造成一个连通图。问从任意一点出发,遍历所有的边,每条边至少访问一次,再回到起点,求满足要求的方案中走过的距离之和的最小短值。【分析】 首先想到的是如果这是一个欧拉图,那肯定能经过每条边有且仅有一次,这样的方案一定是最小的(所有边距离的和)。如果不是欧拉图,由于是连通图,根据握手定理,则必有偶数个点的度为奇数。要从一点出发每边至少走一次,则必须要构成一个欧拉回路,所以有些边必须要走多次,每多走一次等价多连接了一条边,这样构成欧拉图,原先的边和新加的虚拟边在欧拉图中有且仅经过一次。现在还要使距离之和最短。原先的边的距离之和是固定... 阅读全文
posted @ 2013-05-06 22:53 wuminye 阅读(779) 评论(0) 推荐(1)
摘要:题目链接:http://poj.org/problem?id=1182这题的难点是如何确定每个动物的类别,因为光知道 a吃b,b吃c,a有可能为A、B、C中的任意一种,而且一旦说明了某两种是同类,则于这两种相关的动物的类别都需要修改,很是麻烦。 所以,好的方法不是先确定动物的类别,而是确定两个动物之间的关系。 1.用集合表示集合内的某两个动物能确定某种关系,0表示同类,1表示吃,2表示被吃。 2.集合应该能合并,如果两个动物分别处于不同的集合,当确定关于这两个动物的关系时,这两个动物就应属于同个集合(根据集合声明的意义)。所以使用并查集合并集合。 并查集是个树结构,每个节点设置一个关系标... 阅读全文
posted @ 2013-04-14 22:42 wuminye 阅读(278) 评论(0) 推荐(0)
摘要:【题目描述】在 N 条水平线与 M 条竖直线构成的网格中,放 K 枚石子,每个石子都只能放在网格的交叉点上。问在最优的摆放方式下,最多能找到多少四边平行于坐标轴的长方形,它的四个角上都恰好放着一枚石子。【输入】输入文件包含多组测试数据。第一行,给出一个整数T,为数据组数。接下来依次给出每组测试数据。每组数据为三个用空格隔开的整数 N,M,K。33 3 84 5 137 14 86【输出】对于每组测试数据,输出一行"Case #X: Y",其中X表示测试数据编号,Y表示最多能找到的符合条件的长方形数量。所有数据按读入顺序从1开始编号。Case #1: 5Case #2: 18 阅读全文
posted @ 2013-04-07 22:48 wuminye 阅读(1105) 评论(6) 推荐(0)
摘要:网络流 (Network Flow) 是指在一个每条边都有容量 (Capacity) 的有向图分配流,使一条边的流量不会超过它的容量。(边有附带容量的图称为网络)一道流必须符合一个结点的进出的流量相同的限制,除非这是一个源点 (Source) ──有较多向外的流;或是一个汇点 (Sink) ──有较多向内的流。一个网络可以用来模拟道路系统的交通量、管中的液体、电路中的电流或类似一些东西在一个结点的网络中游动的任何事物。 设 是一个有限的有向图,它的每条边 都有一个非负值实数的容量 。如果 ,我们假设 。我们区别两个顶点:一个源点 和一个汇点 。一道网络流是一个对于所有结点 ... 阅读全文
posted @ 2013-03-21 10:19 wuminye 阅读(546) 评论(0) 推荐(1)
摘要:题意:孩子们在幼儿园非常喜欢老虎抓小鸡的游戏。但是有一个比较大的问题:每一个人都想演老虎的角色。因此老师提出一个建议:选举。每个孩子手里面有一些漂亮的手帕,如果他认为某个人适合老虎的角色,他就拿出一个手帕给他,也就是说得到手帕就是得到支持的一票。注意支持是可以传递的。最后得到支持票数最多的人将扮演老虎的角色。(注意:如果A赢得B的支持,A只能得到B的一票,不管B有多少票,既是说A = B得到的选票 + 1,A不能投自己一票)如果多个人获得同样多的票,我们称他们都是赢家。 例子:三个人 A,B,C。A拿一个手帕给B, B拿一个手帕给C, 因此 C得到2个手帕,C被选为扮演老虎。先输入一个测... 阅读全文
posted @ 2013-03-14 21:23 wuminye 阅读(358) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1151 题意:一个城市有m个十字路口(点),n条街道(边),街道是单向的,而且该城市的所有街道不存在环路,现在你要派伞兵空袭,伞兵随机降落在任意的十字路口上,从该十字路口出发能到达的十字路口,该伞兵都能到达(只能选一个到达,也就是说一个伞兵最多2个路口),但只能延一方向前进,不能回头,问,最少需要多少伞兵,能访问该城市的所有十字路口。 题目还说"It is also known that starting from an intersection and walking through town&# 阅读全文
posted @ 2013-02-04 15:39 wuminye 阅读(210) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4334这题首先想到的就是穷举每一行中的数字,相加看是否为0 。 ----别傻了,n5 的循环,等着超时吧! 现在要做的事如何缩减循环次数。先枚举头两行相加的可能结果,发现有些数的和是重复的!也就是说,可能会有多余的循环存在。于是可以先计算出头两行的所以和结果,再去重,再计算3、4行的和结果、去重,拿前面得到的两个数组再和最后一行枚举相加判断就能得到结果。这样复杂度变为n3快了,但是还不够。可以再把之前得到的两个新数组排序下,枚举第5行,对于每次枚举,两个排序后的数组,一个从小到大,一个从大到小查找,发现相加结 阅读全文
posted @ 2012-11-30 16:14 wuminye 阅读(210) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1052题目内容就是田忌赛马,解决思路就是贪心,关键是要怎么贪,。我在看完题目后想到一种方法,就是田忌速度最大的马开始,尽量和速度最接近的马来比,这样结果无非就是平局或获胜,无法匹配的马就当输了。本以为这样可以减少马“性能”上的浪费,就能得到最优解。但有组数据就能当反例:392 83 7092 91 60按照我的算法,92和92 配对,83就只能和60配了。最优的是92和91配,83和60配。我的算法关键就错在对于平局是可以有两种方法的,但我只处理了一种。下面来正确的: 1.当田忌最慢的马比齐王最慢的马快,赢. 阅读全文
posted @ 2012-11-23 21:12 wuminye 阅读(251) 评论(0) 推荐(0)