摘要: 字典树模板题,除了编码的时候要稍微注意一下没有其他难点,输出字典树大小即可 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #incl... 阅读全文
posted @ 2014-04-07 20:22 acm_roll 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 给你一些01串,判断是否会出现其中一个串刚好是另外一个串的前缀。数据规模比较小,不过为了练习trie还是用了trie先把所有的01串都插入到树中,然后依次查找每一个串,看路径上是否有别的串#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INPUT_FILE "in.txt"#define 阅读全文
posted @ 2014-04-06 21:44 acm_roll 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 众所周知,讯飞输入法具备强大的学习功能,对于用户来说,感觉输入法像一个会学习的机器人,比如,当用户第一次输入“sxl”,输入法第一个提示“少写了”,如果用户选择“睡醒了”,当第二次用户再输入“sxl”的时候,“睡醒了”这个词就会出现在比较靠前的位置,神奇吧,输入法就像一个小孩子,在你的指导下慢慢学会每个拼音的含义。现在让我们一起来实现下这个神奇的功能吧,为方便起见,我们假设用户是美国籍的(仅输入小写英语字母),每当该用户输入一个单词时,请输出和该用户输入习惯最为匹配的单词(以该单词为前缀的输入频率最高的单词),如果有多个则输出字典序最小的,如果没有的话,则直接输出该单词。就是校赛的那道字典树模 阅读全文
posted @ 2014-04-06 14:42 acm_roll 阅读(346) 评论(0) 推荐(0) 编辑
摘要: A.随便搞,我偷懒用了一个map。手贱给again加一个感叹号还WA了一发,o(╯□╰)o#include #include using namespace std; map mp; int main() { int n; scanf("%d",&n); int mm,ss,v; scanf("%d:%d",&mm,&ss); v = mm * 60 + ss; for(int i = 1;i #include #include #include #include using namespace std; int a[205],m 阅读全文
posted @ 2014-03-23 23:25 acm_roll 阅读(321) 评论(0) 推荐(1) 编辑
摘要: 说了一大堆,其实就是求一个最长上升子序列,二分优化到nlogn就不会超时啦 #include #include #include #include using namespace std;const int maxn = 500000 + 5;const int INF = INT_MAX / 2;int top[maxn],r[maxn];int main() { int n... 阅读全文
posted @ 2014-03-22 22:03 acm_roll 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 类似滑雪问题,在一个矩阵中求最大的上升路径累加和,并且在一个点一次可以走长度最大的为k的直线。并且起始位置一定是矩阵的左上角1,1。 把每个节点按照高度从低到高排序,然后枚举所有可能到达当前点的值,选其中最大的一个和当前点相加即可 #include #include #include using namespace std;struct Point { int x,y,h; ... 阅读全文
posted @ 2014-03-22 22:01 acm_roll 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 题意大概是,给你一个字符串,如果该字符串的某一个前缀Si是由若干个相同的字符串循环构成,就输出i和最短循环节长度利用KMP算法里面失配函数可以解决这个问题,失配函数f(i)可以定义为字符串的前缀Si-1中最长的与真前缀相等的真后缀的长度。如果当前字符串是由若干个字符串循环构成的话,必然有最长真后缀的长度加上最短循环节(也就是字符串开头的第一个循环节)长度的和应该恰好等于i#include #include using namespace std;const int maxn = 1000005;char str[maxn];int f[maxn];inline void getfail() { 阅读全文
posted @ 2014-03-20 12:10 acm_roll 阅读(267) 评论(0) 推荐(0) 编辑
摘要: KMP模板#include #include using namespace std;const int maxn = 105;int f[maxn];char pat[maxn],str[maxn];inline void getfail() { int len = strlen(pat); f[0] = f[1] = 0; for(int i = 2;i < len;i++) { int j = f[i - 1]; while(j && str[i - 1] != str[j]) j = f[j]; if(str[i - 1] =... 阅读全文
posted @ 2014-03-20 11:58 acm_roll 阅读(136) 评论(0) 推荐(0) 编辑
摘要: Problem Description搬寝室是很累的,xhd深有体会.时间追述2006年7月9号,那天xhd迫于无奈要从27号楼搬到3号楼,因为10号要封楼了.看着寝室里的n件物品,xhd开始发呆,因为n是一个小于2000的整数,实在是太多了,于是xhd决定随便搬2*k件过去就行了.但还是会很累,因为2*k也不小是一个不大于n的整数.幸运的是xhd根据多年的搬东西的经验发现每搬一次的疲劳度是和左右手的物品的重量差的平方成正比(这里补充一句,xhd每次搬两件东西,左手一件右手一件).例如xhd左手拿重量为3的物品,右手拿重量为6的物品,则他搬完这次的疲劳度为(6-3)^2 = 9.现在可怜的xh 阅读全文
posted @ 2014-03-18 22:41 acm_roll 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题意大概是给你一幅柱状图,寻找里面最大的长方形的面积。一类很典型的动态规划问题,我之前一直不会。QAQl[i] r[i]分别表示以i这个柱子为长方形的高,两边最多能够延伸到的位置。如果l[i]的左边那一个的高度大于等于当前的高度,那么就可以延伸下去,一直更新到不能延伸下去为止。即 while(h[l[i]-1]>=h[i]) l[i]=l[l[i]-1];右边以同样的方式处理即可。这个模型可以变换成很多情况,需要好好理解#include #include using namespace std;const int maxn = 100001;int height[maxn],left_b 阅读全文
posted @ 2014-03-17 22:58 acm_roll 阅读(130) 评论(0) 推荐(0) 编辑