UVA 10803 - Thunder Mountain
摘要:Floyd求出任意两个城镇的距离,大于10的置为INF,使其不可达。然后求出符合条件的最大值,输出如果都没有符合条件的就输出 Send Kurdy。#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>const int INF = 0x3F3F3F3F;const int MAXN = 105;double x[MAXN], y[MAXN];double f[MAXN][MAXN], max;int N, n;double min( double a, double b
阅读全文
posted @
2012-02-29 17:04
找回失去的
阅读(240)
推荐(0)
UVA 11045 - My T-shirt suits me
摘要:这是一道网络流的题。将六种不同大小的衣服看成六个点,编号1-6,将志愿者从7-M +6编号,然后源点s = 0, 汇点t = M + 7,网络流的模型就出来了。从源点到衣服的容量是N / 6,从志愿者到汇点的容量是1, 从衣服到志愿者的容量也是1.然后就按照白书上的EK算法写,用BFS找增广路。#include<iostream>#include<cstring>#include<queue>#define INF 100000000#define MAXD 50using namespace std;int flow[MAXD][MAXD], cap[MA
阅读全文
posted @
2012-02-26 20:22
找回失去的
阅读(342)
推荐(0)
UVA 620 - Cellular Structure
摘要:真心不知道怎么用动归,然后网上找到的做法:I think this problem's tip is.. len=string length Mutant : len is 1, and str[0]='B' Simple : if len is 1, and str[0]='A' Fully-Grown : str[len-1]='B', and str[len-2]='A' Mutagenic : str[0]='B', and str[len-1]='A' Else : Mutant然
阅读全文
posted @
2012-02-02 15:45
找回失去的
阅读(189)
推荐(0)
UVA 108 - Maximum Sum
摘要:求出一个矩阵的最大和,我们可以按照行和列计算一块区域的和然后和ans比较,更新ans的值。最后得出的就是所求的最大值。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 110int n, ans;int mat[MAXN][MAXN];int max( int a, int b){ return a > b ? a : b;}int dp( int k){ int f[MAXN], a[MAXN]; memset( f, 0, sizeof f); memset( a, 0,
阅读全文
posted @
2012-02-02 14:55
找回失去的
阅读(357)
推荐(1)
UVA
摘要:题意是找到一个最小的数,使得这个数的各位的乘积等于n,首先小于10的数肯定是他本身了。这里不得不拜服knowledgetime大神,从9到2找到这8个数字作为n的因子可以出现几次,然后从小到大依次输出。#include<cstdio>#include<cstdlib>#include<cstring>int main(){ int a[10]; int n, T; scanf( "%d", &T); while( T --) { scanf( "%d", &n); if( n < 10){ pri
阅读全文
posted @
2012-02-01 18:45
找回失去的
阅读(237)
推荐(0)
UVA 11054 - Wine trading in Gergovia
摘要:因为最终都会满足每个人的要求。所以我们可以当作每个居民与他的邻居进行交易,将每次的交易额计算出来相加即可。#include<cstdio>#include<cstdlib>#define MAXN 100010int a[MAXN];long long min, w;int n;int main(){ while( scanf( "%d", &n), n) { for( int i = 0; i < n; i ++) scanf( "%d", &a[i]); min = w = 0; for( int i =
阅读全文
posted @
2012-02-01 17:45
找回失去的
阅读(254)
推荐(0)
UVA 10341 - Solve It
摘要:一道解方程的题,给定区间0到1.如果f(0) * f(1)大于零代表这个区间内所有的x对应的y值都在y轴的一侧,也就是无解。然后用二分的方法解方程。注意变量都要定义成double。#include<cstdio>#include<cstdlib>#include<cmath>const double T = 10e-8;double p, q, r, s, t, u;double res( double x){ return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x + u;}int main(){
阅读全文
posted @
2012-02-01 17:03
找回失去的
阅读(283)
推荐(0)
UVA 11129 - An antiarithmetic permutation
摘要:一个整数n,求它的一个序列,这个序列的要求是其中任何一个子序列都不能是等差序列。枚举必然超时,然后想了半个小时没有任何想法,就参考了七里 大神的思路,用分治法将序列中处于奇偶位置的数字分组,开始分出来的是等差2的序列,然后再在奇偶序列中分组,最终得出的序列就是符合要求的序列中的一个。暂时没有更好的想法。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 10010int a[MAXN], b[MAXN];int n;void dvide( int x, int y){ int i, j
阅读全文
posted @
2012-02-01 14:09
找回失去的
阅读(487)
推荐(0)
UVA 10361 - Automatic Poetry
摘要:题目大意:两个字符串,一个是s1<s2>s3<s4>s5,另一个是s'...,输出s1s2s3s4s5和s's4s3s2s5.开始一下居然没有想法,后面模拟了下,将s2,s3,s4,s5单独拿出来分别存入a1,a2,a3,a4四个字符串中,然后按题目要求即可!#include<cstdio>#include<cstring>#include<cstdlib>const int MAXD = 105;char s1[MAXD], s2[MAXD];char a1[MAXD], a2[MAXD], a3[MAXD], a4
阅读全文
posted @
2012-01-28 17:16
找回失去的
阅读(362)
推荐(0)
UVA 10878 - Decode the tape
摘要:一道字符串模拟题,每行对应的是字符的ASC码参考了syhd142的写法,他的exp数组用得比较精髓。#include<cstdio>#include<cstdlib>#include<cstring>const int exp[] = { 0, 128, 64, 32, 16, 8, 0, 4, 2, 1};char data[20];int main(){ while( gets( data) ) { int ans = 0; int len = strlen( data); if( data[0] != '|' ) continue; .
阅读全文
posted @
2012-01-28 17:15
找回失去的
阅读(170)
推荐(0)
UVA 644 - Immediate Decodability
摘要:判断一组code当中有没有其中一个是另一个的前缀,如果有的话就不是immediately decodable ,反正则是。我们首先要将每组字符串单独取出来进行排序,按照由短到长,相同长度按字典序排序。排序之后用靠前的字符串与靠后的比较。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 20char co[MAXN][15], str[15];int cmp( const void *_a, const void *_b){ char *a = ( char *)_a; char *b
阅读全文
posted @
2012-01-28 17:14
找回失去的
阅读(418)
推荐(0)
UVA 10010 - Where's Waldorf?
摘要:这道题是要找到字符串在字符矩阵里的位置,并输出其头字母的坐标。我们先找到首字母的位置,然后按照八个方向当中的一个搜索,如果能找到完整的字符串,就输出坐标。与DFS每个点按照八个方向搜索不同的是,这里只是按照一个方向一个方向地搜索。所以搜索函数也稍有不同。#include<cstdio>#include<cstring>#include<cstdlib>#include<ctype.h>#define MAXN 60int cas, m, n, q;int x, y;char r[MAXN][MAXN];const int dx[] = { 1,
阅读全文
posted @
2012-01-28 17:13
找回失去的
阅读(518)
推荐(0)
UVA 10815 - Andy's First Dictionary
摘要:将单词转换成小写后按照字典序输出。#include<cstdio>#include<cstring>#include<cstdlib>#include<ctype.h>char word[100010][50] = {'\0'};int cmp( const void *_p, const void *_q){ char *p = ( char *)_p; char *q = ( char *)_q; return strcmp( p, q);}int main(){ char ch; int n = 0, len = 0; wh
阅读全文
posted @
2012-01-28 17:12
找回失去的
阅读(189)
推荐(0)
UVA 167 - The Sultan's Successors
摘要:八皇后问题的变形,这道题不是要我们求有多少种方法,而是在给定价值的棋盘格子放皇后,使得皇后放置的位置的总价值最大。参考了白书的126页的代码,用vis数组表示已经放置的皇后占据了哪些列以及哪些主、副对角线。然后将放置皇后,改成加上该格子的值。不能忘了将vis初始化false和最后的输出的%5d。#include<cstdio>#include<cstdlib>#include<cstring>#define MAXN 10const int N = 8;int val[MAXN][MAXN], max, ans;bool vis[MAXN][MAXN];vo
阅读全文
posted @
2012-01-16 22:58
找回失去的
阅读(485)
推荐(1)
UVA 639- Don't Get Rooked
摘要:这是一道类似于N皇后的问题,叫我们将车放到小棋盘上面去,规则也类似,让每个车都不能攻击到其他车,然后有墙阻隔,车是不能攻击到墙后的车的。参考了knowledgetime大神的代码,用回溯法来解决这个问题。定义一个mat数组,先将棋盘的情况读入,如果是 ’ .’就将mat[i][j] 置为1,X则置为0;然后有一个放置的函数,对于i行,j列,(I,j都从0开始)我们向上与向左搜索,判断是否该行或该列是否已经放置车,如果没有我们就可以将车放上去,然后将mat的值改成 -1。因为墙是置为0的,所以遇到有墙,而墙的同一侧没有东西,我们也是可以放置车的。最后的工作就是每行逐列地搜索,不断更新max的值,
阅读全文
posted @
2012-01-16 21:47
找回失去的
阅读(683)
推荐(0)
UVA 729 - The Hamming Distance Problem
摘要:这道题前面做了这么多铺垫,然后给我一个长为N的序列,其中有H个1,剩余的是0,要我们按字典序输出该序列的可重集排列,因为昨天刚学会用C++的库函数,我先用Next_permutation函数写了一遍,代码很简洁。#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;int num[20];int main(){ int T; scanf( "%d", &T); int len, n; while(
阅读全文
posted @
2012-01-15 19:00
找回失去的
阅读(437)
推荐(0)
UVA 10474 - Where is the Marble?
摘要:这道题先输入N个数字,再输入Q个数字,我先将前N个数字按照升序排序,依然用的是qsort,然后逐个查找Q个数字在排序后的数组中的位置(取靠前的),从1到N,因为数字可能比较多,所以我采用二分查找来节省时间。二分的思想很有用,而且值得注意的是二分的时候不能遗漏了,不然会得到错误的答案。这道题的二分:int bsearch( int x, int y, int v){ int mid; while( x < y) { mid = x + ( y - x) / 2; if( a[mid] >= v) y = mid; else x = mid + 1; } return a[x] ==
阅读全文
posted @
2012-01-15 18:57
找回失去的
阅读(369)
推荐(0)
UVA 193 - Graph Coloring
摘要:这道题也是一道染色的题,只有黑、白两种颜色,要求有边的两个点不能染成相同的颜色,我用回溯法做的,判断与cur有边的点是否被染色,如果这些点中有一个点已经被染色,那么cur这点只能染与被染色的点不同的颜色,我们就可以向下一个点搜索。如果cur周围的点没有被染色的话,那么cur这点可以自由地染色,我们可以染成黑色或者白色,分两种情况向下一层搜索,直到将所有的点都染上色。然后计数,看哪种情况染的黑色最多,将其复制到color数组中。#include<cstdio>#include<cstring>#include<cstdlib>#define MAXN 110i
阅读全文
posted @
2012-01-15 18:56
找回失去的
阅读(321)
推荐(0)
UVA 10167 - Birthday Cake
摘要:这道题要求我们用一条直线将蛋糕平均分成两半,要求两边的cherrie一样多,并且不能有cherrie 在直线上,当然也不能在外边,我们直接枚举所有的直线的系数a,b的可能情况,遇到第一种情况输出即可。#include<cstdio>#include<cstring>#include<cstdlib>typedef struct coordinate{ int x, y;}C;C co[105];int N, M;void cut(){ int left, right, result; for( int a = -500; a <= 500; a ++)
阅读全文
posted @
2012-01-14 22:18
找回失去的
阅读(315)
推荐(0)
UVA 10098 - Generating Fast
摘要:按字典序从小到大输出字符串的全排列,白书的7.2刚好讲到生成可重集的排列,所以参考白书上的代码写了个函数,具体操作过程是先将字符串中的所有字符按字典序排序,然后调用print_permutation( len, s, a, 0)即可。void print_permutation( int len, char *P, char *A, int cur){ if( cur == len) { for( int i = 0; i < len; i ++) printf( "%c", A[i]); printf( "\n"); } else for( in
阅读全文
posted @
2012-01-14 22:17
找回失去的
阅读(581)
推荐(0)