摘要: 题目链接:http://202.121.199.212/JudgeOnline/problem.php?id=1716【题意】 1到N的区间,一种操作让编号从a到b的数变为z,但不会低于2,问多次操作后大于2的数减2后的和为多少。【分析】 本来这题可以用线段树模拟过的,但是这里的N非常大,达到109,开个一维数组就会爆内存,更何况开个线段树。 分析题目后不难发现最后的一个操作一定生效,之前的操作如果有涉及之后操作区间的部分就会失效。根据这条性质,从操作的后面往前扫描,更新区间内的元素,如果元素被更新过就忽略,这样根据所有元素更新后的值就能算出结果了。如果用元素标记的方法一来时间复杂了,二来内存 阅读全文
posted @ 2014-01-04 22:24 wuminye 阅读(898) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://www.codechef.com/JAN14/problems/SEAGRP【题意】 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1.【分析】 从结论入手,每个点的度恰好为1,那么就意味着每个点只能连接一个点,这样问题就转化为图中的点能否刚好两两配对。 对于奇数个点肯定是不行的,因为一定存在一个点不存在与之配对的点。 如果点是偶数,那么就要求这个图的最大匹配,看匹配树是否为点数的一半。 求匹配的方法和二分图类似,不断找增广路更新匹配数就好了。【代码】 第一次手写增广路代码~写的时候忘记判断增广路是否重点了于是WA了,还好后来想到了。 1 #inc 阅读全文
posted @ 2014-01-04 10:07 wuminye 阅读(551) 评论(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 阅读(321) 评论(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 阅读(332) 评论(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 阅读(757) 评论(0) 推荐(0) 编辑
摘要: 在实际问题中2-SAT问题在大多数时候表现成以下形式:有2N个物品,每2个分为一组,现在要选出N种物品,同组物品不能同时选取,问你在满足题目要求的情况下能不能按规则选出物品,如果可以,那么可能的方案是什么。 在本质中是这样的:对于一个合取范式,是否有一种输入使得他的输出是1,具体点就是类似这样的布尔表达式(x1 or x2 or x3)and(x3 or x4)and(not x1 or x5)对于所有的x是否有一种01取值,使得最后的结果是1。【建模】 建立一个2N阶的有向图,其中的点分为N对,每对点表示布尔序列A的一个元素的0、1取值(以下将代表A[i]的0取值的点称为i,代表A[i]的. 阅读全文
posted @ 2013-08-22 10:47 wuminye 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 调了一个下午,被python的正则绊住了;在C#上运作好好的式子在python老是报错,原来python的断言式必须是固定长度的,像类似(?].*?)的零宽度正回顾后发断言是不允许出现的,这点python做的没有C# 方便,弄得我只好分了好几个步骤来做. 1 __author__ = 'wuminye' 2 import time 3 import urllib 4 import urllib2 5 import cookielib 6 import re 7 8 std = ['Queuing', 'Compiling', 'Runni 阅读全文
posted @ 2013-08-18 19:01 wuminye 阅读(896) 评论(0) 推荐(0) 编辑
摘要: 转自【http://zhuoqiang.me/python-urllib2-usage.html】Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比如 urllib2 这个 HTTP 客户端库。这里总结了一些 urllib2 库的使用细节。1 Proxy 的设置 2 Timeout 设置 3 在 HTTP Request 中加入特定的 Header 4 Redirect 5 Cookie 6 使用 HTTP 的 PUT 和 DELETE 方法 7 得到 HTTP 的返回码 8 Debug Log 1 Proxy 的设置urllib2 默认会使用 阅读全文
posted @ 2013-08-17 16:28 wuminye 阅读(173) 评论(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 阅读(361) 评论(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 阅读(432) 评论(0) 推荐(0) 编辑