上一页 1 2 3 4 5 6 7 ··· 17 下一页

2012年8月7日

[线段相交] 0807

摘要: 模版,注意使用int可能在求叉乘的过程中溢出,解决办法:使用double(使用int在在返回时只返回符号有时也可以);使用double的:# include <cmath>const double eps = 1e-8;struct Point{double x, y;} ;int dcmp(double x){ if (fabs(x) < eps) return 0; return x>0 ? 1:-1;}int direction(Point p1, Point p2, Point p3){ double tmp = (p3.x-p1.x)*(p2.y-p1.y) 阅读全文

posted @ 2012-08-07 09:26 getgoing 阅读(163) 评论(0) 推荐(0) 编辑

[强联通分量_DFS] 0725

摘要: N个学校之间有单向的网络,每个学校得到一套软件后,可以通过单向网络向周边的学校传输。问题1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。问题2:至少需要添加几条传输线路(边),使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。input format:输入有多组样例,大约1000组。每组样例第一行包含两个整数N,M(2<=N<=100),N代表学校的个数,M代表边的个数(M<N*N)接下来M行,每行包含连个整数u,v,代表u可以向v单向发送数据。output format每组样例对应两行,分别是问题一和问题二的解。sam 阅读全文

posted @ 2012-08-07 09:03 getgoing 阅读(219) 评论(0) 推荐(0) 编辑

[简单DP] COJ 1122 Game

摘要: 这道题直接模拟即可,DP相当于一个优化,记录下从第i行第j列出发后到达的最终位置,下次需要时直接取,优化前后最坏情况下复杂度都是O(10^6)。# include <cstdio># include <cstring> # define N 1000 + 5 int n, m;int cnt[N], ff[N], f[N][N];char g[N][N]; int down(int row, int col){ int &ans = f[row][col]; if (ans != -1) return ans; if (row == n) return ans 阅读全文

posted @ 2012-08-07 07:13 getgoing 阅读(757) 评论(0) 推荐(0) 编辑

2012年8月6日

[强联通分量] COJ 1128 Download Station

摘要: 两边DFS求强联通分支,缩点;算法流程:dfs(G);dfs(G') in the order which f[] decreases. output tree in the dfs forest as a strongly connected component第一遍DFS为每个顶点打上时间戳,第二遍是反向DFS,按照时间戳递减的顺序访问每个结点,原图中的边作为反向边进行遍历,此时对于强联通分量必定是可以通过其中任一个点访问到,而原图中时间戳较晚(较早访问到的,注意加时间戳的位置)但不属于某个强联通分量的顶点必然到某个强联通分量有一条单向边,反向DFS时由于原边方向改变,无法通过这条 阅读全文

posted @ 2012-08-06 22:43 getgoing 阅读(268) 评论(0) 推荐(0) 编辑

[拓扑排序] PKU 2585 Window Pains

摘要: 拓扑排序判断有向图是否有环,1A啊!!!对每个位置(前3行前3列),如果它控制范围内的某个位置上为 j ,而这个位置原始值为 i ,则添加一条 i 到 j 的边,如果出现环则说明电脑出问题了;不知道数据中是否含有非法的,所以就加了个判断:判断是否出现了非法状态,即某个位置出现了不属于这个位置的数字。# include <cstdio># include <cstring># define N 5# define NS ((N-1)*(N-1)) + 1const int n = 3;const int m = 9;int in[NS];int f[N][N];char 阅读全文

posted @ 2012-08-06 11:44 getgoing 阅读(175) 评论(0) 推荐(0) 编辑

[拓扑排序] PKU 1094 Sorting It All Out

摘要: 第一道拓扑排序,拓扑排序的过程很简单:每次拿出一个入度为0的顶点放入solu[]尾部,并将它可以直接到达的顶点的入度减1;对这道题需要得到唯一顺序,每次发现有多个入度为0的顶点时,说明还未排好序,此时不应该直接返回cannot be determined而是对所有入度为0的顶点执行上述操作,如果发现到某一步没有入度为0的顶点了说明出现矛盾,此时返回出现矛盾;PS:这道题的输入有重复。# include <cstdio># include <cstring># define N 26 + 1int n, m;int in[N], tmp[N];char ans[N], g 阅读全文

posted @ 2012-08-06 10:08 getgoing 阅读(173) 评论(0) 推荐(0) 编辑

2012年8月5日

[状态压缩DP] PKU 3311 Hie with the Pie

摘要: 和COJ送货到家一样,不过这里不要求每个点只经过一次,因此可以先用floyd预处理出任意两点间的最短距离,然后状态压缩DP。# include <cstdio># include <cstring># define INF 0x3C3C3C3C# define N 10 + 2int n;int w[N][N];int f[1<<N][N];int Min(int x, int y){ return x<y ? x:y;}int dp(int s, int i){ int &ans = f[s][i]; if (ans != -1) retur 阅读全文

posted @ 2012-08-05 22:54 getgoing 阅读(226) 评论(0) 推荐(0) 编辑

[简单DP] HDOJ 4323 Magic Number

摘要: // 编辑距离的方法可以水过这道题编辑距离的计算方法即一个不完全的证明见:http://en.wikipedia.org/wiki/Levenshtein_distance具体如下图:# include <cstdio># include <cstring># define LEN 10 + 2# define N 1500 + 5int n, m;char s[LEN];int len[N];char dic[N][LEN];int Abs(int x){ return x>0 ? x:-x;}int Min(int x, int y, int z){ int 阅读全文

posted @ 2012-08-05 22:12 getgoing 阅读(235) 评论(0) 推荐(0) 编辑

[字典树入门] HDOJ 1251 统计难题

摘要: 不需要保存是否结束(isend),在插入时每经过一个节点,将该节点的计数器 +1,在查找时输出最后一个字符所在节点的cnt值即可;PS:为什么加了删除树(del_Trie)会超时呢?# include <cstdio># include <cstring># define LEN 10 + 1struct node{ int cnt; node * next[26]; node () { cnt = 0; memset(next, 0, sizeof(next)); }};void insert_Trie(node *root, cha... 阅读全文

posted @ 2012-08-05 19:01 getgoing 阅读(213) 评论(0) 推荐(0) 编辑

[状态压缩DP] PKU 2411 Mondriaan's Dream

摘要: 参考http://wenku.baidu.com/view/e262a86f1eb91a37f1115c26.html状态设计:0表示横放,1表示竖放,可以预处理出所有合法状态,f[i, s] 表示到达第 i 层的状态(类似俄罗斯方块,前 i 层合并之后剩余的状态)。状态转移:f[i, s] = sum{f[i-1, s']},s' 为和 s 符合的状态 j 与 s 的异或值。# include <cstdio># include <cstring># define N 11 + 1typedef long long int LL;int m, n;LL 阅读全文

posted @ 2012-08-05 17:25 getgoing 阅读(239) 评论(0) 推荐(0) 编辑

[状态压缩DP] COJ 1129 送货到家

摘要: 第一道状态压缩DP;这道题要求一个无向图的最小权回路,要求经过所有点,所以可以任选一个点(这里选0)作为起点,以后的状态f[s, i]表示从0出发到i结束的最小权路径,最终求得f[1<<n-1, k]后要加上w[0, k],然后求最小值:for k = 0:n-1 ans = min(f[1<<n-1, k]+w[0, k]);print(ans); 1 # include <cstdio> 2 # include <cstring> 3 4 # define N 15 5 # define INF 0X1FFFFFFF 6 7 int n; 8 阅读全文

posted @ 2012-08-05 09:21 getgoing 阅读(163) 评论(0) 推荐(0) 编辑

USACO Section 1.3 Calf Flac

摘要: manacher求最长子串。/*PROG : calfflacLANG : C++*/# include <cstdio># include <cctype># define N 20000 + 5int n;char s[N];int Min(int x, int y){ return x < y ? x : y;}int manacher(char *s, int len, int &st){ int n = len*2+1; char t[2 * N]; /* insert '#' in string s to form a 2*le 阅读全文

posted @ 2012-08-05 08:25 getgoing 阅读(217) 评论(0) 推荐(0) 编辑

2012年8月3日

[集合DP] UVA 10651 Pebble Solitaire

摘要: 根据题目描述,每次变换都减少了一个石子,所以只要求出初始状态最多可以变换多少次,用初始状态石子数目减去这个变换次数就得到最后剩余最少的石子的数目;最多有12位,用一个 int 表示状态,状态的转移可以用位运算实现。 1 /* 2 UVA 10651 - Pebble Solitaire 3 */ 4 # include <cstdio> 5 # include <cstring> 6 7 char s[20]; 8 int f[5000]; 9 10 bool move(int &x, int i, char d)11 {12 int t = (x>> 阅读全文

posted @ 2012-08-03 17:01 getgoing 阅读(317) 评论(0) 推荐(0) 编辑

[简单DP] UVA 10051 Tower of Cubes

摘要: DAG上的DP,六个方向,打印不要求字典序,相反方向可以通过异或得到(定义0-5代表题目所说的五个方向);f[i, p] = 1;for (k = 1:i-1) f[i, p] = max(f[i, p], f[k, q]+1) if (color[i][p^1] == color[k][q]) 1 /* 2 UVA 10051 - Tower of Cubes 3 */ 4 # include <cstdio> 5 # include <cstring> 6 7 # define N 500 + 5 8 # define F 6 9 10 const char s[F 阅读全文

posted @ 2012-08-03 16:03 getgoing 阅读(247) 评论(0) 推荐(0) 编辑

[单调队列] UVA 10534 Wavio Sequence

摘要: 单调队列,Staginner的分析;关键在于正确性和最优性的证明:正确性:通过单调队列的维护,不会得到比实际最长串更大的长度;最优性:通过单调队列的维护,能得到不小于最长串的长度; 实际存在的最长串在出现之后,单调队列的长度不会小于这个最长串的长度(替换不改变长度,只有进队时增加了长度),而之前出现的较大的队列尾会被替换,较小的会被较大的通过入队的方式更新。 1 /* 2 UVA 10534 - Wavio Sequence 3 */ 4 # include <cstring> 5 # include <cstdio> 6 7 # define N 10000 + 5 阅读全文

posted @ 2012-08-03 15:13 getgoing 阅读(294) 评论(0) 推荐(0) 编辑

[简单DP] POJ 1651 Multiplication Puzzle

摘要: 一看就知道是矩阵链,但是忘了矩阵链具体是怎么做的了,记的是把区间划分开来DP。定义f[i, j]为 i-j 内的最小值(初始是1-n),如果第 k 个为最后选的数,那么 f[i, j] = f[i, k]+f[k,j]+a[i]*a[k]*a[j];需要注意的是边界条件:如果区间内不含选取的数(i+1==j)最小值应该定义为0。 1 /* 2 POJ 1651 Multiplication Puzzle 3 */ 4 5 # include <cstdio> 6 # include <cstring> 7 8 # define N 100 + 5 9 # define 阅读全文

posted @ 2012-08-03 10:26 getgoing 阅读(227) 评论(0) 推荐(0) 编辑

[简单DP] POJ 2192 Zipper

摘要: 给出三个串a b c,问 c 是否能由 a b 串中的字符通过混合得到,要保持同一个串中两个字符的前后关系不变。状态:f[i ,j] 表示长度为 i 且使用了b串 j 个字符(使用 a 串 i-j 个字符),布尔型,表示状态是否可达。状态转移: f[i, j] = f[i-1, j] && f[i-1, j-1],对于边界f[0, 0] = true。也可以令 f[i, j] 为使用了 a 串 i 个字符、b 串j个字符是否可达,如下: 1 /* 2 POJ 2192 Zipper 3 */ 4 # include <cstdio> 5 # include < 阅读全文

posted @ 2012-08-03 09:46 getgoing 阅读(201) 评论(0) 推荐(0) 编辑

2012年8月2日

UVA 400 Unix ls

摘要: 字符串,需要注意格式,和样例输出用fc命令比较,一致时就行了。# include <cstdio># include <cstring># include <cstdlib># include <cmath># define N 100 + 5# define M 60 + 5int n;char fname[N][M];int cmp(const void *x, const void *y){ return strcmp((char*)x, (char*)y);}int max(int x, int y){ return x>y ? x 阅读全文

posted @ 2012-08-02 17:01 getgoing 阅读(198) 评论(0) 推荐(0) 编辑

UVA 10115 Automatic Editing

摘要: 字符串函数的应用。# include <cstdio># include <cstring># define RULESN 10 + 5# define MAXLEN 80 + 5int n;char src[RULESN][MAXLEN];char des[RULESN][MAXLEN];char text[4 * MAXLEN];void replace(char *t, char *s, char *d){ int len = strlen(s); char *p, tmp[4 * MAXLEN]; while (p = strstr(t, s)) { ... 阅读全文

posted @ 2012-08-02 16:21 getgoing 阅读(172) 评论(0) 推荐(0) 编辑

UVA 644 - Immediate Decodability

摘要: 枚举。第一次遇见:Your submission with number ***** for the problem 644 - Immediate Decodability has failed with verdict ./* 644 - Immediate Decodability*/# include <cstdio># include <cstring>int n;char s[10][15];bool in(char *p, char *t){ for (int i = 0; p[i]; ++i) if (!t[i] || p[i] != t[i]) re. 阅读全文

posted @ 2012-08-02 15:57 getgoing 阅读(215) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 ··· 17 下一页

导航