IT民工
加油!
摘要: 判断s串中的字符是不是依次出现在t串中,如果s的长度大于t,显然不行,其他的依次比较即可。但是字符串要定义得长一些,开始定义10000,RE了。#include<stdio.h>#include<string.h>char s[100000], t[100000];int main(){ while( scanf( "%s%s", s, t) == 2) { int len1 = strlen(s); int len2 = strlen(t); if( len1 > len2) { printf( "No\n"); ... 阅读全文
posted @ 2011-11-30 12:18 找回失去的 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 判断u->v 和 v -> u是否成对出现。#include<stdio.h>#include<string.h>#define MAXD 1005int G[MAXD][MAXD];int N, u, v;bool check(){ for( int i = 1; i <= 1000; i ++) for( int j = 1; j <= 1000; j ++) if( G[i][j] != 0) return false; return true;}void init(){ memset(G, 0, sizeof G); for(... 阅读全文
posted @ 2011-11-30 11:33 找回失去的 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 这道题和连接校园一样都是求最小生成树,用kruskal算法做,点的坐标要用double型#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#define MAXD 150double x[MAXD], y[MAXD], w[MAXD * MAXD], ans;int r[MAXD * MAXD], p[MAXD], u[MAXD * MAXD], v[MAXD * MAXD];int cas, N, n, nx, ny;double dist( int i, 阅读全文
posted @ 2011-11-30 11:06 找回失去的 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 这道题就是在求最短路,而且是单源最短路吗,所以我先想到了dijkstra算法,结果TLE了,dijkstra的代码:#include<stdio.h>#include<string.h>#define INF 200000005#define MAXD 20005int u, v, w, S, T, n, m, N;int d[MAXD][MAXD], f[MAXD];bool vis[MAXD];int min( int a, int b){ return a < b ? a : b;}void init(){ for( int i = 0; i < n; 阅读全文
posted @ 2011-11-29 23:34 找回失去的 阅读(444) 评论(0) 推荐(1) 编辑
摘要: 这道题和刚才那道题不同,求的是最大边的最小值。同样用了floyd算法d[i][j]=min{d[i][j],max{d[i][k],d[k][j]}}Initilization: d[1..n][1..n]= -1,d[i][i]=0;#include<stdio.h>#define MAXD 105int u, v, w, C, S, Q, q[10005];int d[MAXD][MAXD];int max( int a, int b){ return a > b ? a : b;}void init(){ for( int i = 1; i <= C; i ++) 阅读全文
posted @ 2011-11-28 22:26 找回失去的 阅读(221) 评论(0) 推荐(1) 编辑
摘要: 这道题要使游客从一个点到另一个点,求最小的趟数,我们用floyd算法将所有路径中的最小边的最大值求出来,然后用计算trips就行了。求最小边的最大值的方程为:d[i][j]=max{d[i][j],min{d[i][k],d[k][j]}}初始化:所有 d[i][j]=0;#include<stdio.h>#define MAXD 110int u, v, w, S, D, T, R, N;int d[MAXD][MAXD];int min( int a, int b){ return a < b ? a : b;}void init(){ for( int i = 1; i 阅读全文
posted @ 2011-11-28 20:08 找回失去的 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 这道题是贪心的题,因为鞋匠做事情都是得持续做的,所以我们根据事件的价值降序排序。这里用的依然是间接排序。#include<stdio.h>#include<stdlib.h>#define MAXD 1010double t[MAXD], s[MAXD], w[MAXD];int r[MAXD];int cmp( const void *_p, const void *_q){ int *p = (int *)_p; int *q = (int *)_q; return w[*p] < w[*q];}int main(){ int cas, n; scanf( & 阅读全文
posted @ 2011-11-27 23:57 找回失去的 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 这是求最小生成树的一道题,搬了白书上的Kruskal算法,再一次见到了间接排序。值得注意的是得先用并查集将给的已经有连接的点合并。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define MAXD 760double x[MAXD], y[MAXD], w[10000 * MAXD], ans;int p[MAXD], u[MAXD*MAXD], v[MAXD*MAXD], r[MAXD*MAXD];int N, M, tt, nx, ny, a, b 阅读全文
posted @ 2011-11-26 16:22 找回失去的 阅读(203) 评论(0) 推荐(1) 编辑
摘要: 这道题是求图里任意两点的最短路的长度并且输出,用floyd算法可以解决这个问题,但是题目的输入比较奇葩吧,从i = 1 到 i = 19,第 i 行先输入一个数字n,代表有几个数字,后面跟着的数字都代表与 i 点直接连接的点,他们的距离为1.后面输入m,代表有多少对点,要求我们输出每队点之间的最短路径长度。#include<stdio.h>#include<string.h>#define INF 1000001int n, m, d[25][25];int x, y;int min( int a, int b){ return a < b ? a : b;}in 阅读全文
posted @ 2011-11-25 23:41 找回失去的 阅读(247) 评论(0) 推荐(1) 编辑
摘要: UVA晚上活过来了,一看到这题就感觉是并查集的题,还真是,并查集找到一个最大的集合,然后输出它的元素个数。#include<stdio.h>#include<string.h>#define MAXD 30010int p[MAXD], cnt[MAXD];int n, m;int find_set( int x){ return p[x] == x ? x : (p[x] = find_set(p[x]) );}void union_set( int x, int y){ x = find_set(x); y = find_set(y); if( x == y) re 阅读全文
posted @ 2011-11-25 21:21 找回失去的 阅读(173) 评论(0) 推荐(0) 编辑