
ACM
文章平均质量分 64
zcube
这个作者很懒,什么都没留下…
展开
-
POJ 2588 并查集判联通
/** 这一做用了差不多5个小时,又是一道手机提交AC 的题 此题主要思想:建图和检查连通性,这里用并查集实现 题意:穿越1000*1000的正方形田野,要求从田野左边界进入从右边界出来,田野里面有 n条蛇,每条蛇都有自己的以(x,y)为圆心r为半径的领地,如果他一旦跃入蛇的领地内(注意是 < r), 将会被咬,问他能否安全穿越这片田野。 解析:原创 2012-05-26 22:26:07 · 1758 阅读 · 0 评论 -
UVA 156 - Ananagrams
首先进行单词的大写转小写,然后重排,所以得保存两份单词进行操作。当然,还要标记这个单词重排后是否出现两次,所以还需要一个flag作为标记。处理完成后,最后还需要按照原先单词的字典顺序输出,所以还需要排一次序。#include #include #include struct _s { char a[25]; char b[25]; bool fla原创 2013-01-23 15:29:54 · 1124 阅读 · 0 评论 -
UVA 400 - Unix ls(排版题)
该题中主要用到了整型相除截断的技巧。例如,计算行数和输出时候判断是否为最后一列。#include #include #include int cmp(const void *_a, const void *_b) { char *a = (char*)_a; char *b = (char*)_b; return strcmp(a, b);原创 2013-01-23 16:31:29 · 1018 阅读 · 0 评论 -
UVA 120 - Stacks of Flapjacks
输入数字是以回车结束每一行,注意只输入一个数字情况。感觉这道题答案应该不唯一。下面代码是从后往前搜索,如果在相应位置就过去;如果不在就交换到第0位置,然后在做一次交换到相应位置。#include #include #include int cmp(const void *_a, const void *_b) { int* a = (int *)_a; in原创 2013-01-09 22:23:59 · 2403 阅读 · 0 评论 -
UVA 123 - Searching Quickly(分离单词)
这道题还是有点麻烦的。如果把每个句子存为一个字符串,则在最后分离单词的时候会很麻烦。所以,我用一个结构体来作为一句话,把每句话中的单词单独储存,则最后处理的时候会方便很多。#include #include #include struct ss { int x, y; char word[20][50]; char key[50];}stmp[原创 2013-01-24 21:38:59 · 1844 阅读 · 2 评论 -
UVA 10194 - Football (aka Soccer)
这道题读懂题意后还是很简单的,除了中间要注意gets()函数的用法。gets()函数可接收空格符,并且以回车结束后会吸收掉结束的换行符。但是scanf()函数以空格和换行作为输入的结束符,且不会吸收结束符。所以gets()前如果有scanf()函数,一定得加getchar()函数吸收掉sanf()函数的结束符。 这道题提交了15次才通过,很让人纠结。注意:1、规则最后一条字典顺序原创 2013-01-25 02:01:14 · 1864 阅读 · 0 评论 -
UVA 113 - Power of Cryptography(数学)
大数开方,结果不超过整型范围。我用的高精和二分在POJ通过了,在UVA没通过。后来在网上看到有大牛直接用double过了,实在让人佩服啊。我的代码:#include #include // 交换字符串函数void swap_str(char str[]) { int len = strlen(str); for (int i=0; i<len/2; i+原创 2013-01-26 22:18:38 · 3903 阅读 · 3 评论 -
UVA 10250 - The Other Two Trees(几何)
在纸上画了下,用全等三角形定则,找了下规律。 #include #include double compute(double x1, double y1, double x2, double y2) { return (x1+x2+y1-y2)/2;}int main() { double x[4], y[4]; while (sc原创 2013-01-26 22:26:36 · 1586 阅读 · 0 评论 -
UVA 575 - Skew Binary (模拟)
汝佳哥把这道题归为数论。按照题中的计算步骤,直接模拟就过了。#include #include #include int main() { char str[50]; while (scanf("%s", str) && str[0]!='0') { int len = strlen(str); int res = 0原创 2013-01-26 22:22:29 · 872 阅读 · 0 评论 -
UVA 112 - Tree Summing(栈)
又是一道让我心碎的题。UVA上提交了10几次都错了,在北大上又过了。用栈做的,在处理输入和判断括号上感觉还蛮良好的。#include #include #define MAXN 10000int stack[MAXN];int topc, top, t;bool judge() { int sum = 0; for (int i=1; i<=to原创 2013-01-26 22:32:58 · 2672 阅读 · 0 评论 -
UVA 101 - The Blocks Problem(模拟)
题目不难,就是有点麻烦。会用到栈。#include #include struct _r { int a[30]; int x;}r[30];int n;// 判断a, b是否在同一堆中int pos(int a) { for (int i=0; i<n; i++) { for (int j=0; j<r[i]原创 2013-02-28 09:41:12 · 877 阅读 · 0 评论 -
UVA 127 - "Accordian" Patience (模拟)
就把优快云当成保存UVA做题代码的一个地方好了。。。 #include #include struct _r { char a[53][3]; int x;}r[53]; // 定义好要用的数据结构// 移动处理函数void deal(int n, int s) { int left = r[n-s].x; int ri原创 2013-02-27 18:08:11 · 2015 阅读 · 0 评论 -
UVA 299 - Train Swapping(冒泡排序)
模拟下冒泡,每次交换都+1即可。#include int main() { int n, l, s[55]; scanf("%d", &n); while (n--) { scanf("%d", &l); for (int i=0; i<l; i++) scanf("%d", &s[i]);原创 2013-01-05 18:27:37 · 1002 阅读 · 0 评论 -
UVA 152 - Tree's a Crowd
原本以为精度问题,原来是最后需要一个换行。直接暴力是0.216,如果加个弱弱的排序优化一下是0.120。#include #include #include #include #define sqr(x) ((x)*(x))typedef struct _Point { double x, y, z;}Point;int cmp(const v原创 2013-01-05 17:35:06 · 999 阅读 · 0 评论 -
粘一个在UVA和ZOJ都能AC但POJ WR的代码
翻开刘汝佳的算法竞赛入门经典,看到了很久以前做过的一道题目。用栈模拟火车进站出站。该题在POJ题号为1363,;ZOJ为1259;UVA为514。我没有用栈去做,已经在UVA和ZOJ均AC,但是不晓得POJ为啥过不了。现在把代码贴到下面,等明天清醒了再找漏洞。#include int main(){ int n; while (scanf("%d", &原创 2012-12-30 00:59:54 · 1642 阅读 · 0 评论 -
UVA 644 Immediate Decodability
排序后相似前缀就会相邻,那样就比较好处理了。#include #include #include #define min(a, b) ((a)<(b)?(a):(b))char str[1000][100];int cmp(const void* _a, const void *_b) { char *a = (char*)_a; char原创 2012-12-31 14:20:42 · 1082 阅读 · 0 评论 -
UVA10815 Andy's First Dictionary
排序 + 分离单词技巧#include #include #include bool isLetter(char &ch) { if (ch >= 'a' && ch <= 'z') return true; if (ch >= 'A' && ch <='Z') { ch += 'a' - 'A'; re原创 2012-12-29 22:04:51 · 1543 阅读 · 0 评论 -
UVA 424 - Integer Inquiry (大数相加问题)
给多组大数,求所有相加之和。#include #include // 该函数实现str1和str2相加,将结果保存在str1中void add(char str1[], char str2[]) { int i, j; int l1 = strlen(str1); int l2 = strlen(str2); int a[1050],原创 2013-01-01 00:38:31 · 2129 阅读 · 0 评论 -
UVA 10494 - If We Were a Child Again(大数与整型相除取整和取余)
这道题让选手模拟相除和取余的过程,由于除数为整型,使得这道题的难度大大减小。要注意在模拟取余和相处的时候,中间的临时数会超过整型范围。 提供一个数据:21474836447 / 2147483647#include #include // 大数字符串str与整型x相除,商赋给strvoid myDiv(char str[], int x) { int b原创 2013-01-03 16:27:32 · 2086 阅读 · 0 评论 -
UVA 10420 - List of Conquests
字符串排序。#include #include #include int cmp(const void *a, const void *b) { char *_a = (char *)a; char *_b = (char *)b; return strcmp(_a, _b);}int main() { char str[原创 2013-01-04 16:12:37 · 1476 阅读 · 0 评论 -
UVA 10115 - Automatic Editing(字符串替换问题)
这是一道替换字符串中关键字的题。就像word中用一字符串替换另外一个文本中包含的字符串。下面代码中,找到被替换串位置后用了4步进行替换:1、被替换串起始位置之前的字符串复制到临时字符串中;2、将新字符串复制到临时字符串中;3、将被替换串结束位置后的字符串复制到临时字符串中;4、将临时字符串复制到原字符串#include #include // 该函数实现将字符串原创 2012-12-31 20:06:32 · 1244 阅读 · 0 评论 -
UVA 340 - Master-Mind Hints
这道题英文描述太冗余。最后看了有个小哥一句话描述的题意才明白了http://blog.163.com/kakarrot@yeah/blog/static/12011592520106241155854/。其实就是统计两个序列相同列相同数字的个数和不同列相同数字的个数。要注意,两列中任意一个元素如果已经用过就不能再用了。 由于只有9个数字,所以只需要统计每个数字出现的个数即可。先把原创 2013-01-03 18:24:46 · 4958 阅读 · 3 评论 -
UVA 10474 - Where is the Marble?
主要利用题目中的条件,并不需要排序。因为出现的数不超过10000。只需要统计0 - 10000出现数的个数,就可以确定出现数的排名。#include #include #include int main() { int n, q; int que[10005]; int count = 1; while (scanf("%d%d",原创 2013-01-04 17:08:18 · 2075 阅读 · 0 评论 -
UVA 465 - Overflow (浮点数的优势)
这道题体现了浮点数的优势。即使用64位整数(注意long long要I64d输出),溢出也会变成负数,判断起来比较困难。如果用double类型,即使字符串位数超过百位,同样用sscanf()函数进行处理,却不会变成负数。原因是浮点数可以用指数表示。例如,double的正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。意思是可以将原创 2013-01-02 14:37:50 · 2293 阅读 · 0 评论 -
UVA 10106 - Product (大数相乘问题)
简单的模拟了下乘法,效率不高。记得以前见过有个模板是4位相乘模拟的。#include #include void add(int sum[], int c[], int n) { int cp = 0; for (int i=0; i<n; i++) { int tmp = sum[i] + c[i] + cp; sum[i]原创 2013-01-01 20:20:35 · 1333 阅读 · 0 评论 -
UVA 572 - Oil Deposits(DFS)
用DFS把相邻的@字符标记掉,并统计块的个数就好了。#include int m, n;char map[105][105];int dir[8][2] = {-1, -1, -1, 0, -1, 1, 0, -1, // 定义8个方向数组 0, 1, 1, -1, 1, 0, 1, 1};void dfs(int x, i原创 2013-02-28 07:48:38 · 1256 阅读 · 0 评论