摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2222 毫无遮掩的AC自动机一枚!刚开始的时候不知道这题是用AC自动机做的,于是我就用了后缀数组,大概算了一下,貌似是勉强可以通过少数的大数据的。不过实际情况是超时了。。。。。这是后缀数组的代码:Suffix Array 1 /* 2 * Author: Lyon 3 * Problem: hdu 2222 4 * Method: Suffix Array 5 */ 6 #include 7 #include 8 #include 9 10 #define FOR(i, a... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3435 题意是,从一个给定的图里得到一个或以上的哈密顿回路,使得所有边权之和最小。子图不能只有一个点。 很容易想到用KM最优匹配,将自环全都设置为不连通,然后一次KM匹配就可以完成了!这次的KM算法不能只用一个slack来记录松弛的大小,必须要用多个slack,以空间来换时间。于是我就顺便更新我的KM模板了~!AC代码:View Code 1 /* 2 * Author: Lyon 3 * Problem: hdu 3435 4 */ 5 6 #include <cstdio> 7... 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2766 不知道算是什么题,应该是排序题吧。。。。 直接将weight乘以2^depth,然后统计相同的个数最多有多少个,用总数减去统计出来的个数就是答案了! AC代码:View Code 1 /* 2 Auther: Lyon 3 Problem: hdu 2766 4 */ 5 6 #include <cstdio> 7 #include <iostream> 8 #include <cstring> 9 #include <cassert>10 #inclu 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3645 一道单纯的模拟,不过要非常仔细的读题,否则必然会有各种各样的错误!区域赛的模拟题就是有难度,差点又卡我一个晚上了。。。。囧! 给点自己debug用的数据:SampleSample in:2Alice 1 3[2010/07/18 12:00:00] SYNC[2010/07/18 12:01:00] MODIFY 1[2010/07/18 12:05:00] SUBMITBob 2 3[2010/07/18 12:00:01] SYNC[2010/07/18 12:01:30] MODIFY 1[.. 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3006 状态压缩,位运算!看到别人题解里有这题,就看到这题是用状态压缩来做的,当时我想都不想就马上把状态压缩的代码打上去。不过我打着打着才发现好像不是那么简单,就算压缩了也不能搜索啊。。。囧!然后我又陷入一片窘境。。。。。 后来想到了可以改变思考的方向,不是找集合合并后会产生怎样的集合。因为元素的个数是限定的,所以集合的上限是确定的,因此我想到了搜索每种情况是否可能达成。代码如下:View Code 1 #include <cstdio> 2 #include <cstring> 3 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3308 又是一题区间合并的题,今晚就这题就debug到我晕了。。。。。 同样是之前poj那题的错误,就是区间合并的部分思路混乱了一下。 题目很简洁,就是要求区间的最大上升子串,同时要有动态的单点更新!线段树功能【单点更新,查询区间】。 题目告诉我,我应该找多点这样的题来做,从而防止这样的思维混乱再次发生,因为这明显就是应该1y的水题!- -View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib& 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=3648 题意相当简单,就是要找出所有给定大小的r*r的矩阵的中位数。 这题理论上可以用各种各样的数据结构完成,可以用线段树(或线段树的退化版,点树),treap,AVL树,或者树状数组等。不过,由于数据规模的限制,这题就只能用树状数组来过了。因为其他以上提到的数据结构都是因为常数太大,所以会超时。另外,这题还要模拟矩阵移动的过程,要蛇形移动,否则元素进出树状数组的次数过多也会超时!AC精简版:View Code 1 #include <cstdio> 2 #include <cassert& 阅读全文
摘要:
这是codeforces gym中的2011-2012 Stanford Local Contest, 8 October, 2011的一道几何题。题意很简单,就是给出500条直线,问你有多少个不被其他直线穿过的三角形。这道题一个很简单的思路就是先要找出每条直线上的交点,因为如果图形是空三角形,那么组成三角形的的每两个顶点都是某条直线上相邻的两个交点。于是我们利用直线的标号,用某条直线上所有点相邻的两条直线与该直线组成三角形,很容易可以找到最多不超过250000个三角形。其中必然会有重复的三角形。如果三角形重复次数是3(最多也只能是3),那么这个就是一个空三角形。用multiset可以很方.. 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=2871 这是要用线段树的一道模拟题,题意相当简单,就是模拟内存分配的操作。题目用到线段树【单点更新,单点查询,区间更新,查找区间】的功能。 New:寻找是否有大于指定长度的区间,并将区间染色,标记起始位置。 Free:查询单点值,如果已被占用,则删除该区间。 Get:查找第x个区间,并返回起始位置。 Reset:将区间清空。View Code 1 #include <cstdio> 2 #include <cstring> 3 #include <vector> 4 #in 阅读全文
摘要:
http://acm.hdu.edu.cn/showproblem.php?pid=4027 【更新区间,查询区间】的线段树,必须抓住修改6次以后每个数必然会变成1,然后以后的修改都将不起作用,在此之前的更新都是暴力更新。这是相当简单的题! 我的做法是记录那些区间里的数都是小于2的,然后在更新的时候就不必更新那那些区间了。不过这题在数据格式中有个小trick,就是给出的区间范围的两个指针x可以大于y,这时在区间修改之前要交换回来。我就是在这个惯性思维的小trick上卡了一个下午。。。。。囧!View Code 1 #include <cstdio> 2 #include <c 阅读全文