05 2012 档案

摘要:数据量比较大的并查集一开始一直RE,提取字符串中的整数时出错了,换种方法就AC了思路:路径压缩的并查集一个小优化(766ms)挤进第一版:合并集合的时候始终以把较大的数的集合并到较小的数的集合#include<cstdio>#include<ctype.h>#include<algorithm>#define MAXN 6000010using namespace std;int set[MAXN];int Find(int x){ if(x==set[x]) return x; set[x]=Find(set[x]); return set[x];}voi 阅读全文
posted @ 2012-05-31 19:54 阅读(271) 评论(0) 推荐(0) 编辑
摘要:模式搜索?:匹配任何字符*:匹配任意个字符,包括零个建立模式串的字典树,用并查集合并相同模式串查询的时候深搜任何可能#include<cstdio>#include<algorithm>#include<cstring>#define MAXN 100010using namespace std;int n,m;struct Trie{ int i; Trie *a[28];};Trie root;char p[7],s[22];int set[MAXN];bool mat[MAXN];void Insert(Trie *rt,int k,int j){ i 阅读全文
posted @ 2012-05-25 21:14 阅读(232) 评论(0) 推荐(0) 编辑
摘要:比赛后才做的250简单题View Code #include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <sstream>#include <map>#include <set># 阅读全文
posted @ 2012-05-25 20:03 阅读(178) 评论(0) 推荐(0) 编辑
摘要:题意概述:用罗马数字在堆栈里进行四则运算解决思路:用贪心模拟阿拉比数字和罗马数字之间的转换,细节Code Length居然排第一!除0出错的时候0要出栈,WA了一次 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 5 char s[8]="IVXLCDM"; 6 int b[7]={1,5,10,50,100,500,1000}; 7 8 int ToDec(char *str) 9 {10 int n,k,i,j,c[33];11 n=(int)strlen(str); 阅读全文
posted @ 2012-05-14 19:19 阅读(200) 评论(0) 推荐(0) 编辑
摘要:题意:从一种状态通过若干个需要能量操作转换成力另一种状态所需最少的能量。一开始以为是位DP,后来发现位数(20)位太多,只能广度搜索,偷了一下懒,直接用优先队列,一开始没用pair,只保存状态,WA了3次。pair的大小是先比较first再比较second#include<cstdio>#include<cstring>#include<queue>#include<utility>#include<vector>using namespace std;typedef pair<int , int> Word ;int o 阅读全文
posted @ 2012-05-12 16:31 阅读(430) 评论(0) 推荐(0) 编辑
摘要:Trie树POJ 1451 T9题意:模拟用9个键的手机进行输入的,每输一个字母,输出最可能匹配的单词。一开始想用链表储存所有的单词,写的时候才发现连链表维护,实在太麻烦了,而且效率又不高。对于固定的输入,只用输出一个最可能匹配的词,所以不用保存所有的单词,只用保存频率最高的词就可以了。两个单词的前缀可能重叠,所以要预处理,使任何单词或前缀只插入一次。View Code 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define MAXN 1010 5 using namesp 阅读全文
posted @ 2012-05-06 21:10 阅读(287) 评论(0) 推荐(0) 编辑
摘要:最长上升子序列类动态规划dp[i] = min(dp[i],dp[j] + k)题意:给定若干单词,把它们排成每行字符数为n的若干行,词与词之间可填充任意个空格,设某个单词与单词之间的空格数为g,(g-1)^2称为坏点, 求使所有坏点和最小得排版方式.技巧:因为要构造字母序最小的最优解,所以可以从后往前进行DP计算View Code #include<cstdio>#include<cstring>#define MAXN 10010using namespace std;char word[MAXN][82];int a[MAXN],aft[MAXN],b[MAXN] 阅读全文
posted @ 2012-05-05 14:57 阅读(268) 评论(0) 推荐(0) 编辑