摘要: 题意:给n个病毒字符串和一个程序字符串,若程序字符串包含某个病毒字符串或者它的反串,则包含这个病毒,问所给程序字符串包含多少个病毒?分析:用病毒串和反串建立AC自动机,然后求包含多少病毒,但同一个病毒可能会被计算2次(如果病毒和它的反串都出现在程序中),对于每个病毒,它在自动机中都有2个结点代表自身结尾和反串结尾,我们对每个病毒都记录这2个结点,在统计的过程中可以把走过的结点打上标记,最后再统计哪些病毒的2个结点都被标记,说明被统计了2次,需要减去一次,这样就没问题了。但是题中说了程序串是压缩的,所以需要先需处理,而且还要考虑嵌套压缩的情况,当时就没考虑到……View Code #includ 阅读全文
posted @ 2012-09-14 23:17 BeatLJ 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 分析:只需枚举4个起始时间即可,确定起始时间后,后面的时间就都确定了,求最大值时,利用贪心策略,每次都选结束时间最早的。题中说的时间不会超过1000,貌似数据中有大于1000的,被坑了……View Code #include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define N 300struct node{ int x,y; bool operator<(const node &t) const { return y<t.y; }};i 阅读全文
posted @ 2012-09-14 23:04 BeatLJ 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 题意:求区间(P , Q]中第K个恰含x个4和y个7的数。P,Q<2^63分析:以前看到的数位DP的题都是求某个区间内满足给定条件的数的个数,看到这题我们一下可能没什么想法,也可能想到先求区间内的个数,然后二分答案,初看起来可以,但仔细想想就会发现有问题,因为即使知道(P , Q]内恰好有K个,你还是不知道第K个是哪个,所以二分貌似做不了。后来搜了下别人的解法,看过之后才恍然大悟,求解的过程非常巧妙,简而言之就是从高到低依次确定各个位的数字。不解释太多,看代码就明白了……View Code #include <stdio.h>#include <string.h> 阅读全文
posted @ 2012-09-14 22:57 BeatLJ 阅读(340) 评论(0) 推荐(0) 编辑