上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页

2012年7月10日

HDOJ 2544 Dijkstra

摘要: 迪杰斯特拉算法的过程如下:初始化,把除起点之外的所有点到起点的距离初始化为 INF,起点到起点的距离记为0,标记清空,;FOR i = 1:n 选取到起点距离最近的结点; 如果选取的点为目标点,结束,否则标记这个点,并对它相邻的所有点进行松弛操作;END-----------------------------------------------------------------------------------# include <stdio.h># include <string.h># define N 105# define INF 100005int n, 阅读全文

posted @ 2012-07-10 10:11 getgoing 阅读(242) 评论(0) 推荐(0) 编辑

Problem B: 0710 均分纸牌

摘要: Description 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移动。 移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。 现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。 例如 N=4,4 堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ②(9... 阅读全文

posted @ 2012-07-10 09:18 getgoing 阅读(1796) 评论(0) 推荐(0) 编辑

2012年7月9日

POJ 1936 All in All

摘要: 查找第一个串是否是第二个串的子序列;# include <stdio.h># include <string.h># define N 100005char p[N], t[N];char check(char *x, char *y){ int lenx, leny, i, j; lenx = strlen(x), leny = strlen(y); if (lenx > leny) return 0; for (i = 0, j = 0; j < leny; ++j) { if (x[i] == y[j]) ++i; if (i ... 阅读全文

posted @ 2012-07-09 16:34 getgoing 阅读(156) 评论(0) 推荐(0) 编辑

POJ 3080 Blue Jeans

摘要: 按照 CSGrandeur 的方法做的;枚举第一个串的所有子串,并查找是否在其他串中出现,需要注意题目要求在最大长度前提下,输出字典序最小的串,这里也点小难,刚开始没看懂大侠的代码,后来试了几种控制方法,有的需要先把 cstr 清空,显得麻烦,才逐渐理解了;# include <stdio.h># include <string.h># define N 65int n;char dic[15][N], cstr[N];char find(void){ char buf[N], ok; int len, i, j; cstr[0] = 0; for (len = 60; 阅读全文

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

POJ 1035 Spell checker

摘要: 按照 CSGrandeur 大牛的给出的方法做的;暴力即可;判断是否可以添加一个 字符得到时,有点小技巧,具体见代码;# include <stdio.h># include <string.h># define WL 17int n;char dic[10005][WL], word[WL];char exist(char *buf){ int i; for (i = 0; i < n; ++i) { if (strcmp(dic[i], word) == 0) return 1; } return 0;}char replace(char *x,... 阅读全文

posted @ 2012-07-09 14:42 getgoing 阅读(210) 评论(0) 推荐(0) 编辑

COJ 1174 Shining Gems边界控制

摘要: 这道题对枚举时限比较严,在写 check 函数时要注意边界不能超,因为超出边界有可能引用了上一组残留的数据,而使用 memset() 则会超时。# include <stdio.h># define N 1005# define DIR 4 const int dir[][2] = {{0,1}, {1,0}, {0,-1}, {-1,0}};int n, m;char b[N][N];char check(int i, int j){ char ch; int cnt, s; for (cnt = 1, s = i-2; s<i+2; ... 阅读全文

posted @ 2012-07-09 11:33 getgoing 阅读(187) 评论(0) 推荐(0) 编辑

HDOJ 1754 I Hate It

摘要: 线段树入门题,和敌兵布阵一样只有更新和查询操作,维护的是最大值;# include <stdio.h># include <string.h># define N (1 << 19)# define M (1 << 18)int segMax[N*2+10];int max(int x, int y){ return x>y ? x:y;}void initTree(void){ segMax[0] = 0; memset(segMax, 0, sizeof(segMax));}int update(int p, int val){ p + 阅读全文

posted @ 2012-07-09 09:23 getgoing 阅读(180) 评论(0) 推荐(0) 编辑

POJ 3660 Cow Contest

摘要: 对每个结点 BFS 一遍,找出能被它打败和可以打败它的结点的总和 s ,如果 s == n-1 ,它的排名可以确定;C++ vector 邻接表;# include <cstdio># include <iostream># include <cstring># include <vector># define N 105using namespace std;int n, m;char vis[N];vector <int> pre[N];vector <int> aft[N];int bfs(int u, int d) 阅读全文

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

2012年7月8日

HDOJ 1166 敌兵布阵

摘要: 线段树的入门题,数组代替树;线段树是一种完全二叉树,主要操作有建树、修改节点、区间询问(最大值或者和等),由于采用二叉树结构,对一个结点的操作复杂为 logn;这里建树、修改和询问操作没有采用递归方式,主要是利用了线段树也是完全二叉树的特点,因此可以直接根据要查看节点的编号(1..n)求得其对应在树中的编号,就可以直接进行操作,而不需要递归来实现。# include <stdio.h># include <string.h># define N (1 << 17)# define M ((1 << 16) )int segSum[N];void 阅读全文

posted @ 2012-07-08 17:10 getgoing 阅读(201) 评论(0) 推荐(0) 编辑

COJ 1081: 集训队分组

摘要: Description中南大学ACM的暑期集训马上就要开始了,这次集训会将全体N名集训队员(编号分别为1, 2, …, N)按集训选拔赛的排名分成两组,前K名队员分入A组,其余队员分入B组。但现在助理教练CSGrandeur一不小心把集训选拔赛的排名弄丢了,而之前又没将A组和B组的人员确定出来,于是CSGrandeur打算问一下集训人员他们的名次各是怎样的,以此来确定一下A组的队员。然而集训队员们都视名次如粪土,只是隐约记得某些人排在了自己的后面,最终反馈到CSGrandeur这里的一共有M条信息,每条信息都可以用一个二元组(x, y) (x!=y)表示,含义为第x名队员记得第y名队员的排名比 阅读全文

posted @ 2012-07-08 14:45 getgoing 阅读(492) 评论(0) 推荐(0) 编辑

卡特兰数

摘要: (摘自维基百科)卡塔兰数维基百科,自由的百科全书卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。卡塔兰数的一般项公式为 前几项为 (OEIS中的数列A000108): 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 阅读全文

posted @ 2012-07-08 10:52 getgoing 阅读(1463) 评论(0) 推荐(1) 编辑

2012年7月7日

HDOJ 2948 错排公式

摘要: 将第 n 个数放在 第 k 个位置上,共 n-1 种;如果第 k 个数放在第 n 个位置,共有 f[n-2] 种,否则由于第 k 个数不能放在第 n 个位置,剩余的数相当于 n-1 个数时的子问题,即f[n-1];# include <stdio.h>long long int f[21], fact[21];void prepare(void){ int i; fact[1] = 1; for (i = 2; i <= 20; ++i) fact[i] = i * fact[i-1]; f[1] = 0; f[2] = 1; ... 阅读全文

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

UVa 193 - Graph Coloring

摘要: dfs;按照 Staginner 大牛的方法写的,大致思路是:刚开始所有点没有着色,且最终结果至少有一个点被着黑色(一个点时直接着黑色,多个点时,可以任选一个点为黑色,其余点全为白色);枚举这个黑色的点,并且把与它相邻的点都着白色,剩下的可以看作是一个相同的子问题了,因为剩下的点都不与这个黑色的点相邻。最优解满足:每个白色的点至少与一个黑色的点相邻(如果这个点相邻的都是白色,可以把它改为黑色),且每个黑色的点周围都是白色。# include <stdio.h># include <string.h># define N 105int n, m, ans;char g[N 阅读全文

posted @ 2012-07-07 09:44 getgoing 阅读(284) 评论(0) 推荐(0) 编辑

2012年7月6日

10474 - Where is the Marble?

摘要: 排序,检索;使用 bsearch 的 cmp 不能只返回 -1 或 1 (可能是要用差进行比较);# include <stdio.h># include <stdlib.h># include <string.h># define N 10005int n, q, a[N], f[N];int cmp(const void *x, const void *y){return ( *(int*)x - *(int*)y );}int main(){ int i, cnt, x; cnt = 0; while (1) { scanf("%d%... 阅读全文

posted @ 2012-07-06 10:52 getgoing 阅读(238) 评论(0) 推荐(0) 编辑

2012年7月5日

HDOJ 2091 空格的特殊输入输出格式

摘要: %*c 用于输入时,忽略一个字符的输入,可用于忽略换行和 getchar() 作用一样;%*c 用于输出时,输出若干个空格后输出一个字符,比如 printf("%*c", 10, 'a'); 是输出9个空格在第十个位置输出'a';题目:打印如下的空心三角形,遇到 '@' 结束 A A A A A A A A A A AAAAAAAAAAAAAA# include <stdio.h>int main(){ int i, n; char ch, ok; ok = 0; while (1) {... 阅读全文

posted @ 2012-07-05 11:30 getgoing 阅读(337) 评论(0) 推荐(0) 编辑

HDOJ 2093 sscanf的使用,字符串对齐,快排

摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2093sscanf的使用,字符串对齐,快排;# include <stdio.h># include <stdlib.h># define N 1005typedef struct {char name[15]; int n; int s;} Player;Player p[N];int n, m;int cmp(const void *xx, const void *yy){ Player *x, *y; x = (Player*)xx; y = (Player*)yy; ... 阅读全文

posted @ 2012-07-05 10:19 getgoing 阅读(373) 评论(2) 推荐(0) 编辑

HDOJ 2094 set和map的使用

摘要: C++ 中 set 和 map 的使用, 拓扑排序(并查集也能做);Problem Description有一群人,打乒乓球比赛,两两捉对撕杀,每两个人之间最多打一场比赛。球赛的规则如下:如果A打败了B,B又打败了C,而A与C之间没有进行过比赛,那么就认定,A一定能打败C。如果A打败了B,B又打败了C,而且,C又打败了A,那么A、B、C三者都不可能成为冠军。根据这个规则,无需循环较量,或许就能确定冠军。你的任务就是面对一群比赛选手,在经过了若干场撕杀之后,确定是否已经实际上产生了冠军。map 比较好用;# include <iostream># include <set> 阅读全文

posted @ 2012-07-05 09:47 getgoing 阅读(274) 评论(0) 推荐(0) 编辑

2012年7月3日

HDOJ 2037 不相交区间的最大个数

摘要: 贪心法,看了 DISCUSS 后写的, 以前听过大牛的讲解,这是第一道题。# include <stdio.h># include <stdlib.h># define N 105int n;int t[N][2];int cmp(const void *x, const void *y){ return *(int *)x > *(int *)y ? 1:-1;}int main(){ int i, c, tmp; while (1) { scanf("%d", &n); if (n == 0) break; for ... 阅读全文

posted @ 2012-07-03 23:11 getgoing 阅读(318) 评论(0) 推荐(0) 编辑

HDOJ 2036 多边形的面积

摘要: 整数坐标下,面积的2倍也是整数;多边形面积公式;# include <stdio.h># define N 105int n;int x[N], y[N];double area(void){ int i; double ret; ret = 0; for (i = 0; i < n-1; ++i) { ret += x[i]*y[i+1] - x[i+1]*y[i]; } ret += x[n-1]*y[0] - x[0]*y[n-1]; return ret*0.5;}int main(){ int i; ... 阅读全文

posted @ 2012-07-03 22:52 getgoing 阅读(236) 评论(0) 推荐(0) 编辑

COJ 1046 追杀

摘要: 马可以从任意位置出发,走遍整个棋盘;先用 bfs 求出马到达每个位置的最短时间 Ti,然后模拟将的移动,当将移动的时间 Tk 满足 Tk>=Ti 且Tk-Ti为偶数时相遇(马可以在两个位置徘徊一会等待将的到来);# include <stdio.h># include <string.h>const int dir[][2] = {{1,2}, {2,1}, {-1,2}, {1,-2}, {-2,1}, {2,-1}, {-1,-2}, {-2,-1}};int nx, ny, kx, ky;char vis[9][8], dis[9][8];void bfs( 阅读全文

posted @ 2012-07-03 22:17 getgoing 阅读(226) 评论(0) 推荐(0) 编辑

上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 17 下一页

导航