- 博客(43)
- 资源 (2)
- 收藏
- 关注
原创 POJ 3882 Stammering Aliens 后缀数组height应用
题目来源:POJ 3882 Stammering Aliens题意:给你m一个一个字符串 求至少出现m次的最长字符串 可以在字符串中重叠出现思路:二分长度l 然后从height数组中找长度大于等于l的前缀 #include #include #include using namespace std;const int maxn = 40010;char s[maxn];in
2014-04-30 14:42:25 1327
原创 后缀数组模版
char s[maxn];int sa[maxn];int t[maxn], t2[maxn], c[maxn];int rank[maxn], height[maxn];int n;void build_sa(int m){ int i, *x = t, *y = t2; for(i = 0; i < m; i++) c[i] = 0; for(i = 0; i < n;
2014-04-29 18:07:47 903
原创 FOJ 2170 花生的序列 DP
题目来源:FOJ 2170 花生的序列题意:给你一个长度为2*n的由W和B组成字符串 该字符串是由2个长度为n的并且是WBWBW....形式的 求有多少种组成方案思路:dp[i][j] 代表第一个字符串长度为i 第二个字符串长度为j时的数量然后根据i和j的奇偶数递推i为奇数 原来的字符串的第i位是W 为偶数是B j同上i+j是到输入的串的位置 #include #inc
2014-04-28 12:47:21 1089
原创 福州大学第十一届程序设计竞赛
Problem 2167 大王叫我来巡山呐比赛的第二题 呵呵Problem 2168 防守阵地 I比赛时看懂第一题 大了下草稿 马上切了它假设当前x=(ai)*1+(ai+1)*2+(ai+2)*3+''''+(aj)*m下一次是(ai+1)*1+(ai+2)*2+(ai+3)*3+''''+(aj+1)*m = (ai)*1+(ai+1)*2+(ai+2)*3+''''+(a
2014-04-27 17:33:18 1419
原创 UVa 11019 Matrix Matcher 字符矩阵出现次数
题目来源:UVa 11019 Matrix Matcher题意:输入2个字符矩阵 求第二个字符矩阵在第一个字符矩阵中出现的次数思路:见大白书218页#include #include #include #include using namespace std;const int maxn = 1010;const int maxm = 110;char a[maxn][m
2014-04-26 21:44:50 962
转载 数位DP专题
hdu2089 不要62Hdu3555不能出现连续的49UESTC 1307相邻的数差大于等于2HDU 3652 出现13,而且能被13整除。HDU 3709 平衡数light OJ 1140两个数之间的所有数中零的个数。lightoj 1032 二进制数中连续两个‘1’出现次数的和Codeforces 55D. Beautiful numbers POJ 325
2014-04-21 13:34:41 865
原创 HDU 3440 House Man 差分约束
题目来源:HDU 3440 House Man题意:要从高度最低的地方(记为s)跳到高度最高的地方(记为e) 每次跳跃的距离为d 每次只能跳到下一个帮他高的位置 n个位置需要跳n-1次每个位置都有一个高度值 并且顺序不能换 求s到e的最远距离思路:差分约束 建图 首先每个位置不能重叠 所以d[i+1] - d[i] >= 1 换成小于等于号 d[i] - d[i+1] 然后对高度排
2014-04-21 11:35:23 1289
原创 HDU 1534 Schedule Problem 差分约束输出一组解
题目来源:HDU 1534 Schedule Problem题意:若干个派对 每个派对需要连续几天的时间 接下来有一些限制条件 诸如第i个派对开始时间必须在第j个派对开始之后..(4种)求出任意一种安排的方案 无解输出impossible思路:差分约束求最长路求最小值的类型 #include #include #include #include using namesp
2014-04-20 16:26:10 1113
原创 HDU 3592 World Exhibition 差分约束基础题
题目来源:HDU 3592 World Exhibition题意:若干限制条件 求1到n的最大距离思路:直接差分约束这里收集了某大牛的总结/*题意:求符合题意的最小集合的元素个数题目要求的是求的最短路,则对于 不等式 f(b)-f(a)>=c,建立 一条 b 到 a 的边 权值为 c,则求的最长路 即为 最小值(集合)并且有隐含条件:0<=f(a)-f(a-1)<=1
2014-04-20 15:26:50 1196
原创 最短路模版
SPFAbool SPFA(){ memset(inq, false, sizeof(inq)); for(int i = 0; i <= n; i++) d[i] = INF; d[0] = 0; queue Q; Q.push(0); inq[0] = true; while(!Q.empty()) { int u = Q.front(); Q.pop();
2014-04-20 13:21:05 1008
原创 POJ 2375 Cow Ski Area 强连通图最少添边数
题目来源:POJ 2375 Cow Ski Area题意:n*m的一个矩阵 如果在一个点上 可以往上下左右4个点 并且必须大于等于要去的点 可以安装一个任意门 每个任意门可以连接容易2个点 求最少安装多少个任意门 可以是全通连通 思路:强连通分量缩点 求出度为0和入读为0的连通分量2者的最大值 特判全图强连通的情况#include #include #include #inc
2014-04-19 16:39:10 1259
原创 强连通分量模版
Tarjanvector G[maxn];int pre[maxn];int low[maxn];int sccno[maxn];int dfs_clock;int scc_cnt;stack S;int n, m;int degree[maxn];int cnt[maxn];void dfs(int u){ pre[u] = low[u] = ++dfs_cloc
2014-04-19 11:04:29 900
原创 POJ 2778 DNA Sequence 长度为n且不含m种模式串的字符串种数
题目来源:POJ 2778 DNA Sequence题意:给你m个字符串 求出长度为n 并且不包含m个模式串的任何一个的文本串的数量思路:有一个经典的矩阵题目:给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数 这里的k步就是字符串的长度 点就是AC自动机上的节点 2点之间有路必须满足2个节点都不是禁止节点 求的长度为n 然后次矩阵快速幂即可 需要透彻理解AC
2014-04-18 23:45:56 1446
原创 HDU 2457 DNA repair 不含模式串的最少修改次数
题目来源:HDU 2457 DNA repair题意:给你一个文本串 求最少需要修改的次数 使得文本串不包含模式串思路:可以一位一位构造一个和文本串长度一样的字符串 就4个字符 每次4选1 如果对应的位置的字符不一样修改的次数+1 并且构造的时候不包含禁止节点 dp[i][j] 代表到文本串的前i位 在ac自动机的状态为j 最少需要修改的次数dp[l+1][v] = min(dp[
2014-04-18 19:03:28 1158
原创 UVa 11468 Substring AC自动机+概率DP
题目来源:UVA 11468 Substring题意:求不包含任意一个模式串的长度为l的文本串的概率 给出可以使用的字符的种类及其概率思路:AC自动机+概率DP #include #include #include using namespace std;const int maxnode = 20*22;const int size = 66;int ch[maxn
2014-04-18 14:25:27 1029
原创 HDU 2896 病毒侵袭 AC自动机裸题
题目来源:HDU 2896 病毒侵袭题意:求文本串中有多少个模式串 并且输出下标思路:直接ac自动机 然后数组记录在输出 我日写了半天结果函数没调用 找了半天错误 你要长记性啊 这种错误犯了好几次了啊 笨蛋#include #include #include using namespace std;const int maxn = 10010;char a[maxn];
2014-04-15 15:23:28 917
原创 HDU 3695 Computer Virus on Planet Pandora AC自动机裸题
题目来源:HDU 3695 Computer Virus on Planet Pandora题意:输入n个字符串 求最后一个字符串有n个字符串中的几种思路:直接暴力ac自动机#include #include #include using namespace std;const int maxn = 5200010;char s1[maxn], s2[maxn], s3[ma
2014-04-14 22:56:21 1047
原创 AC自动机模版
struct node{ int val; node *next[26]; node *fail; node() { val = 0; for(int i = 0; i < 26; i++) next[i] = NULL; fail = NULL; }};node *root;void insert(char *s){ int n = strlen(s)
2014-04-14 11:00:22 914
原创 UVa 11732 strcmp() Anyone? 求字符串比较次数
题目来源:UVa 11732 strcmp() Anyone?题意:求若干个字符串两两比较需要的次数 than 和 that 需要比7次 there和the需要7次 就是LCP的长度*2+1 特判2个字符串一样的情况abc和abc需要8次思路:利用字典树 每个点出现分叉的时候说明有些字符串可以比较出来了 总和加上当前深度*和当前节点不一样的兄弟数 链表超时了 学习了左儿子又兄弟表示法
2014-04-10 14:02:32 1065
原创 UVa 11488 Hyper Prefix Sets 字典树基础题
题目来源:UVa 11488 Hyper Prefix Sets题意:求公共前缀的长度与有该前缀的字符串的数量的乘积的最大值思路:对于字典树很清楚的可以马上做出来 建树时直接取节点数量和节点深度的乘积的最大值#include #include #include using namespace std;struct node{ int val; node *next[2];
2014-04-09 18:52:17 1225
原创 C#记事本
3 编写程序代码首先在代码的通用段声明以下两个公共变量,他们都是布尔型的,“b”用于判断文件是新建的还是从磁盘打开的,“s”用于判断文件是否被保存。//*************************************************************************/* 布尔变量b用于判断文件是新建的还是从磁盘打开的, true表示文件是从
2014-04-09 15:25:16 2588
原创 字典树模版
数组版 来自大白书int ch[maxnode][sigma_size];int val[maxnode];int sz;void init(){ sz = 1; memset(ch[0], 0, sizeof(ch[0]));}int idx(char c){ return c - 'a';}void insert(char *s){ int u = 0, n
2014-04-09 13:11:16 972
原创 HDU 4749 Parade Show 相对匹配的KMP
题目来源:HDU 4749 Parade Show题意:从长度为n的序列最多能找到多少个不重叠的的连续的子串 和长度位m的序列的相对大小相同 思路:转化成KMP 把原来的字母相同换成一个检测是否相对大小相同的函数 具体参考了http://blog.csdn.net/no__stop/article/details/11949743#include #include const i
2014-04-08 14:57:24 1521 3
原创 字符串匹配模版
void getFail(){ int m = strlen(p); f[0] = f[1] = 0; for(int i = 1; i < m; i++) { int j = f[i]; while(j && p[i] != p[j]) j = f[j]; f[i+1] = p[i] == p[j] ? j+1 : 0; }}void find(){ int
2014-04-07 20:41:48 964
转载 博弈题集
刷博弈前请看:http://blog.csdn.net/liuqiyao_01/article/details/8479340===================================================================================================HDOJ1079&POJ1082&ZOJ1024Calendar
2014-04-07 17:11:40 902
转载 最短路&差分约束题集
最短路【HDU】1548 A strange lift基础最短路(或bfs)★2544 最短路基础最短路★3790 最短路径问题基础最短路★2066 一个人的旅行基础最短路(多源多汇,可以建立超级源点和终点)★2112 HDU Today基础最短路★1874 畅通工程续基础最短路★1217 Arbitrage 货
2014-04-07 16:18:52 941
原创 HDU 1599 find the mincost route 无向图最小环
题目来源:HDU 1599 find the mincost route题意:求最小的3点组成的环思路:floyd 参考http://blog.sina.com.cn/s/blog_476a25110100mag6.html http://www.cppblog.com/mythit/archive/2009/04/21/80579.aspx#include #include #i
2014-04-07 15:39:07 1021
原创 HDU 3986 Harry Potter and the Final Battle 删掉任意一条边的最长最短路
题目来源:HDU 3986 Harry Potter and the Final Battle题意:哈利波特要从1到n 不过敌人可以破坏一条边 求最坏的情况下到达n需要的最短时间 不能到达输出-1思路:和上一题差不多 每次枚举最短路上的边 然后去掉该条边在做最短路 因为是无向的 不要忘记把它的反向边也删除 上一题一定有解 这题不一定 如果去掉一条边后无法到达n那么输出-1 因为敌人足够
2014-04-07 14:03:47 1207
原创 HDU 1595 find the longest of the shortest 删掉任意一条边的最长最短路
题目来源:HDU 1595 find the longest of the shortest题意:n个点m条边的无向图 有一条路是不能走的 求从1到n最短路的最大值思路:首先求出最短路 如果坏掉的那条路不在最短路上 那么最短路是不会变大的 所以枚举最短路上的n-1条边 每次把这条路设为正无穷 在做最短路 取最大值一次Dijkstra的最短路的复杂度是mlogn n次最短路的复杂度是nm
2014-04-07 13:20:51 1153
原创 HDU The Shortest Path 矩阵的最短路
题目来源:HDU The Shortest Path题意:如果A*B=C 那么A与C之间的距离为1 其中ABC为矩阵 下面q次询问 求2个矩阵之间的最短路思路:暴力 n的5次的复杂度 枚举2个矩阵 然后算出2个矩阵的乘积 再去找第三个矩阵 建图 然后floyd 1500ms左右 其中写成了函数调用也超时了#include #include using namespace std;
2014-04-06 23:48:19 1112
原创 HDU 2224 The shortest path 双调旅行商问题
题目来源:HDU 2224 The shortest path题意:求从1到n 然后在从n到1的最短路 去的时候经过的点的顺序必须从小到大 来的时候经过的点的顺序必须从大到小 并且每个点只能经过一次(1和n不算) 输出最短路的长度思路:经典题 参考了大牛http://www.cppblog.com/doer-xee/archive/2009/11/30/102296.html#inc
2014-04-06 21:57:59 1209
原创 HDU 3339 In Action 价值为最短路的背包
题目来源:HDU 3339 In Action题意:有一个系统要去破坏 该系统是有n个点组成的图 每个点有一个权值 可以从0排除任意个机器人 去占领一个点 每个机器只能占领一个地方 所有机器人占领点的权值之和大于所有点权值之和的一半(不能等于) 就算破环成功 求在破坏的情况下所有机器人走过的路径之和最小 思路:简而言之 就是选出若干个点 他们的和大于总数的一半 并且走的路最短
2014-04-06 00:00:11 1242
原创 POJ 3259 Wormholes Bellman-Ford找负环
题目来源:POJ 3259 Wormholes题意:某人想回到过去 输入有2中类型的边 一种是正的 并且是双向的 另外一种是负的 是单向的 可以回到过去就输出YES 否则NO思路:和UVa 558差不多 如果存在负环就可以通过这个负环一直无限时光倒流 找负环用SPFA或者Bellman-Ford#include #include #include using namespace
2014-04-05 18:32:59 1154
原创 POJ 3660 Cow Contest 传递闭包确定名次
题目来源:POJ 3660 Cow Contest题意:n头牛 下面m行 每行x y 代表牛x打败了牛y 问有几头牛的最终排名是确定的思路:传递闭包 如果x打败了y 令a[x][y]=1 并且a[y][x]=-1 其他不知道的都为0 然后floyd 最后对于每头牛数一下是否有n-1个1或者-1(就是不为0) 如果有n-1个不为0 说明该牛和其他牛都确定了状态#include #
2014-04-05 15:49:23 1051
原创 HDU 1839 Delay Constrained Maximum Capacity Path 最短路+二分
题目来源:HDU 1839 Delay Constrained Maximum Capacity Path题意:给你一张无向图 要从1到n运送东西 每条路都有容量限制和经过的时间 选择一条路径该路径最多能运的数量等于容量最少的那条边 并且总时间不能超过T思路:和上一题一样 二分容量 然后做最短路判断是否最短时间小于等于T#include #include #include #in
2014-04-04 23:40:59 1017
原创 HDU 2962 Trucking 最短路+二分
题目来源 HDU 2962 题意:给你一张无向图n个点m条边 给出起点s终点e和最大承受的高度 其中每条路都有限制的高度以及该条路的长度 求从s到e最大可以通过的高度和在最大高度的前提下的最短路思路:二分高度再求最短路 无解特判一下#include #include #include #include using namespace std;const int maxn
2014-04-04 23:16:25 882
原创 HDU 1535 Invitation Cards 2次Dijkstra来回最短路
题意:从1派学生到2-n这n-1个点 求去并且回来的最短路 就是1到各点的最短路之和和各点到1的最短路之和 给的是有向图思路:对于1到各个点的最短路直接Dijkstra求出无压力 然后各个点到1的最短路可以反向建图后再求一次从1到各个点的最短路对于很多点到一个点的情况可以考虑反向建图 转变成单源最短路#include #include #include #include us
2014-04-04 21:23:14 1028
原创 HDU 1317 XYZZY Bellman-Ford求最长路 判断正环
题意:给你n个房间 开始有能量值100 判断能否从1到第n个房间 每到一个房间可以获得能量x(可能小于0) 每到一个房间总能量必须大于0 每个房间可以重复到达思路:求一个从1到n的最长路 不过可能有正环 没有正环 直接求最长路 如果有正环 判断环中的点是否可以到达n具体用Bellman-Ford算法 虽然复杂度是(n*m)这题应该可以了 如果迭代n-1次之后还能松弛 说明有正环 然后
2014-04-04 18:50:48 1772
原创 POJ 2002 Squares hash求正方形个数
题意:给你n个点 坐标都小于20000 数一下可以组成多少个正方形思路:借鉴了网上hash的思路 哈希链地址法 把x+y的绝对值相同的放人一个链表里 然后枚举2个点(1条边上的) 推算出另外2个点另外2点分别是 x1 = a[i].x+(a[i].y-a[j].y);y1 = a[i].y-(a[i].x-a[j].x);x2 = a[j].x+(a[i].y-a[j].y);y2
2014-04-04 16:11:52 901
原创 HDU 2371 Decode the Strings 矩阵快速幂求m次置换
题意:给你一个置换和一个字符串 按照置换m次之后的结果 求原字符串思路:构造一个矩阵1的每一行只有1个1 a[i][j]代表第i个字母替换成了第j个字母 然后快速幂#include #include const int maxn = 88;struct Mat{ int a[maxn][maxn];};Mat A, B;int n, m;Mat get(Mat x,
2014-04-04 10:24:05 1114
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人