摘要: 给一列数据list 再给查询字符串 求字符串在list中出现的次数对于每个数据 暴力枚举他的子串 注意同一个字符串出现的次数不要叠加如 list: abab ab Q: ab 则答案为2 不为3 故要记录子串处于哪个数据(pos)View Code #include <stdio.h>#include <stdlib.h>#include <string.h>const int MAXN = 50005;struct node{ int pos, cnt; node *next[26]; node() { cnt = 1; memset(ne... 阅读全文
posted @ 2013-03-12 13:27 April_Tsui 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 要求比较大的乘积 就应该吧g[i][j] = 0若求最短路 就把g[i][j] = INF 比较好处理View Code #include <stdio.h>#include <string.h>#include <algorithm>#include <queue>using std::sort;using std::queue;const int INF = 0x3f3f3f3f, MAXN = 300;bool set[MAXN];int n, m;double g[MAXN][MAXN];char kind[MAXN][100];cons 阅读全文
posted @ 2013-03-11 17:28 April_Tsui 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 输出多源最短路径 但是要加上经过城市的tax 如果有多条 选择字典序最小那条学习 floyd 和 path 记录的方法 path[i][j] 记录在i-j里面离i最近的那个节点floyd其实很好用 但是时间复杂度有点高 但代码简单 曾经有spfa解这道题 总是有这样那样的小问题代码非常麻烦 以后要看情况使用。。。View Code #include <stdio.h>#include <string.h>#include <algorithm>#include <queue>using std::sort;using std::queue;con 阅读全文
posted @ 2013-03-11 09:50 April_Tsui 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 最短路 + 记忆化搜索dfs科普一下 spfahttp://hi.baidu.com/qw4365/item/f9a4fa3077224df4a9842809View Code #include <stdio.h>#include <string.h>#include <algorithm>using std::sort;const int INF = (1<<30)-1, MAXN = 1005;bool set[MAXN];int dis[MAXN], n, m, r[MAXN][MAXN], cnt, count[MAXN];struct 阅读全文
posted @ 2013-03-10 14:11 April_Tsui 阅读(140) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2066还是多点dijkstra 这里要注意出发城市和到达城市 有可能不在n m里例如 n=2, m=3 这只表明有几个城市 但是有可能城市标号为10.故对于每个case 要计算出一个big,他为出发城市和到达城市 标号最大的如果标号很大 但是城市个数相对较小 可以使用离散化方法这题很坑爹 题意应该是单向边 居然是双向的=-=View Code #include <stdio.h>#include <string.h>#include <queue>using namespa 阅读全文
posted @ 2013-03-10 12:20 April_Tsui 阅读(135) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2433题意:给出边建立图 然后依次删除给出的边,求最短路,如无法连通 则返回INF这里最短路 = 多源最短路和 即求出对于单源最短路 再for一个循环求出多源最短路 相加用dijkstra 复杂度为V*(E+V),由于这里很特殊 每条路长度都是1 故可以使用bfs 最先搜到的节点一定是最短的bfs 时间复杂度 E , 但如果每次拆路都对所有节点重新求最短路 复杂度则是 E*V*E 还多个case 可能不过这里可以使用used[x][u][v] 来记录对于以x为源点的树 是否使用town[u][v] 这条路 若 阅读全文
posted @ 2013-03-10 10:13 April_Tsui 阅读(948) 评论(0) 推荐(0) 编辑
摘要: 做了无数次最大流 这次终于AC了。。。 每次都RE 真是崩溃!计算得到最多金矿 就是cost为负数 变相求最小费用最大流3 21 2 30 0 01 4 2其实他第一次肯定走1->2->5->8->9 得到 9 你可能会疑惑这不就是贪心吗这样下去下次最多得到3 但实际上输出是得到4 为啥?因为走第一次之后他设置了退边的流量为min 使得它可以退回即1->4->7->8->5->2->3->6->9 这是其中一条路 具体哪条要看进队列顺序所以其实这样不是贪心 贪心不能做这题的 这题有点动规的意思首先 讲每个点分为两点A,B 阅读全文
posted @ 2013-03-09 20:24 April_Tsui 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 不用指针优化就703MS 指针优化93MS注意要用int64 因为过程中可能会相乘溢出#include <stdio.h>#include <iostream>#include <stdlib.h>#include <string.h>const int INF = 2100000000 ;int dir[5] = {0,2, 3, 5, 7};int p[5] = {0,1, 1, 1, 1};__int64 table[6000];int main(){ int cnt = 1, i, j, n, pos; __int64 min ; tab 阅读全文
posted @ 2013-03-08 16:47 April_Tsui 阅读(148) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1596floyd 貌似超时 (代码转载)View Codedijkstra + heap优化这题因为是不知道有多少个query 所以直接用dij 应该会更快View Code #include <stdio.h>#include <string.h>const int MAXN = 1010;double map[MAXN][MAXN], dis[MAXN];bool set[MAXN];int size = 0, heap[MAXN], pl[MAXN], n;void exchan 阅读全文
posted @ 2013-03-08 11:38 April_Tsui 阅读(184) 评论(0) 推荐(0) 编辑
摘要: DFS or 随机化dfs: 138K 1738MSView Code #include <stdio.h>#include <string.h>const int MAXN = 25;int best = 0;int map[MAXN][MAXN], n;bool join[MAXN];void dfs(int t, int num){ int i, j ; if(num == 0) { int sum = 0; for(i=1; i<=n; i++) for(j=i+1; j<=n; j++) ... 阅读全文
posted @ 2013-03-07 11:17 April_Tsui 阅读(196) 评论(0) 推荐(0) 编辑