2011年12月29日
摘要: UVA_310 一般LRJ选出来的但用户solve率这么少的题目大概都是有trick的,几个月前写过一次,结果交上去只有三种情况WA、TLE、RE。今天又写了一下,结果出乎意料地AC了,所以也说不清当初卡在哪里了。 说一说这次的思路吧,首先a和b的转换字符串u、v都是非空的,w也是非空的,但z可能为空,每次替换都需要把字符串中所有a替换成u,所有的b替换成v,第一次写的时候对这个替换的规则审题审了好久,后来偶然有个机会研究了一下L-System并用Java画了几个L-System的图形,这才对L-System的字符串的演变规则有了更深一点的了解。 明确了规则之后,需要再理解一下下面这个命... 阅读全文
posted @ 2011-12-29 23:59 Staginner 阅读(595) 评论(0) 推荐(1) 编辑
摘要: UVA_10125 核心的思想就是先把a+b的值建一个哈希表,然后枚举d-c的值,如果找到和d-c相同的a+b并且4个元素各不相同的话,就更新一下最后结果。 当然,哈希函数的设计可以随意的,如果超时了不妨换一个。#include<stdio.h>#include<string.h>#include<math.h>#define HASH 1000003#define MAXN 1010#define MAXD 1000010#define INF 1000000000000llint N, head[HASH], next[MAXD], st[MAXD][2 阅读全文
posted @ 2011-12-29 20:44 Staginner 阅读(475) 评论(0) 推荐(0) 编辑
摘要: UVA_10562 建树的过程并不算复杂,找好比较容易处理的一个部分看做一个阶段,然后递归即可。 一开始没有仔细审题,误以为根节点只能是字母,而且还忽略了树为空的情况。#include<stdio.h>#include<string.h>#define MAXD 210int N;char b[MAXD][MAXD];void dfs(int x, int y){ int i, j, k; for(i = y; b[x][i] == '-'; i ++) if(b[x + 1][i] != ' ' && b[x + 1][ 阅读全文
posted @ 2011-12-29 19:47 Staginner 阅读(468) 评论(0) 推荐(0) 编辑
摘要: UVA_839 这个题目虽然是树的结构,但我们可以不必把树的结构建立起来,因为后面可以不必再遍历树了,读入数据的过程本身就是一个遍历树的过程,在这个过程中可以把每个节点的权值计算出来,之后就只需要扫描一遍所有节点,看节点两端是否力矩平衡即可。#include<stdio.h>#include<string.h>#define MAXD 1000010int size, wl[MAXD], wr[MAXD], dl[MAXD], dr[MAXD], d[MAXD], ok;int dfs(){ int k; ++ size; k = size; scanf("% 阅读全文
posted @ 2011-12-29 19:14 Staginner 阅读(331) 评论(0) 推荐(0) 编辑
摘要: UVA_327 模拟题目所说的即可。#include<stdio.h>#include<string.h>#include<ctype.h>#define MAXD 200int pre[MAXD], vis[MAXD], last[MAXD];char b[MAXD], st1[MAXD], st2[MAXD], st3[MAXD];void solve(){ int i, j, k, n1, n2, n3, res; for(i = 'a'; i <= 'z'; i ++) { pre[i] = i - 'a 阅读全文
posted @ 2011-12-29 18:18 Staginner 阅读(445) 评论(0) 推荐(0) 编辑