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
找回失去的
阅读(516)
推荐(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
找回失去的
阅读(187)
推荐(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
找回失去的
阅读(681)
推荐(0)
Section 1.2 dualpal
摘要:这道题与上面那道题不同,这道题要我们从S + 1开始找出 N个数,这N个数在2到10进制中的形式至少有两个回文数。我们只需依次判断,符合要求就输出即可。/*ID:yucept21LANG:C++TASK:dualpal*/#include<cstdio>#include<cstring>#include<cstdlib>const int MAXN = 50;int N, S;char s[MAXN];char B[] = "0123456789" ;bool ispal( char *s){ int len = strlen( s);
阅读全文
posted @
2012-01-16 17:29
找回失去的
阅读(140)
推荐(0)
Section 1.2 palsquare
摘要:这道题是要我们判断在B进制下,1<= n <= 300, n^2是否为回文数,如果是回文数的话就输出该数及其平方在B进制下的形式。因为进制 2 <= B <= 20,所以先定义一个一个进制数组 const char B[21] = "0123456789ABCDEFGHIJ";然后输入进制n,1->300求出其平方在n进制下的形式,判断是否为回文数,是的话再将数字在n进制下的形式求出。/*ID:yucept21LANG:C++TASK:palsquare*/#include<cstdio>#include<cstring>
阅读全文
posted @
2012-01-16 17:28
找回失去的
阅读(144)
推荐(0)
Section 1.2 namenum
摘要:这道题的题意给我们一个dict.txt, 里面按照字典序存入了近5000个可接受的牛的名字,然后输入一个编号,让我们输出所有对应的可接受名字,首先我用一个alpha数组将26个字母对应其对应的编号,定义两个字符串,一个用来存编号,一个用来从txt文件读入名字。比较的话,我们通过字符串来对应编号,而不是编号对应字符串,每次读入一个名字,我们就将翻译成编号,然后与输入的编号来比较,如果一致就输出名字,如果没有找到,就输出NONE。/*ID:yucept21LANG:C++TASK:namenum*/#include<cstdio>#include<cstring>#incl
阅读全文
posted @
2012-01-16 17:27
找回失去的
阅读(231)
推荐(0)
Section 1.2 transform
摘要:这道题要求找到一种操作方式对字符串数组a进行操作,使得其与b一致。一共有六种操作方式,首先定义三个数组,a,b,c,前两个数组是输入,然后c数组每次选择操作方式之前使其等于a,然后对c进行操作,这道题值得注意的是操作选择是从1到6,必须按照顺序来,进行每一种操作后, 将c与b做比较,如果一致,就输出当前操作的编号,如果找不到操作方式,那么就输出 7./*ID:yucept21LANG:C++TASK:transform*/#include<cstdio>#include<cstring>#include<cstdlib>const int N = 15;ch
阅读全文
posted @
2012-01-16 17:26
找回失去的
阅读(213)
推荐(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
找回失去的
阅读(368)
推荐(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)
UVA 146 – ID Codes
摘要:这道题要求生成给出字符串的下一个字典序字符串,首先我们先判断是否存在这样的一个字符串,如果一个字符串的前一个字符总是比后一个字符大的话,那么是不存在下一个字典序的。我们从后面开始查找,直到找到一个前面的字符比后面的小,然后在找到的这个字符到字符串结尾的区间做变换从后往前,首字符和比它大的字符做交换,交换的最后结果是找到了比首字符大一点的字符,然后将该区间内除首字符的其他字符按字典序排序。即找到这个区间内下一个首字符的最小字典序。不用库函数的写法:#include<cstdio>#include<cstring>#include<cstdlib>char s[
阅读全文
posted @
2012-01-14 22:13
找回失去的
阅读(1157)
推荐(0)
Section 1.2 milk2
摘要:这道题要计算的是最长的有牛被挤奶的时间和最长的没有牛被挤奶的时间。首先用结构体存储每头牛的起止时间。然后按照开始时间升序排序。定义一个cur的结构体表示当前工作的起止时间,t =cur.end - cur.begin;代表的是工作的时间,然后当milk[i].begin > cur.end时,一段连续的工作时间被终止了,则t=cur.begin-milk[i].end是一段没有工作的时间。每计算出一段时间就和当前的最大时间比较,然后更新最大时间。/*ID:yucept21LANG:C++TASK:milk2*/#include<cstdio>#include<cstri
阅读全文
posted @
2012-01-14 15:05
找回失去的
阅读(162)
推荐(0)
Section 1.1 beads
摘要:这道题要计算将项链切断,然后从两端收集的相同的颜色的珠子数,两端的颜色可以不同,但是同一端的必须一样。我先讲字符串复制了一遍加到原来的字符串后面,然后把两个同样的项链放在一块,从头开始用两个变量(变量)a,b记录自左方某点至目前为止可搜集到之两种颜色珠子数,取途中所出现a+b之最大值,遇颜色变换时再将b指定给a即可,w也可以直接计数。/*ID:yucept21LANG:C++TASK:beads*/#include<cstdio>#include<cstring>#include<cstdlib>int main(){ freopen( "bead
阅读全文
posted @
2012-01-14 15:04
找回失去的
阅读(161)
推荐(0)
Section 1.1 Friday
摘要:这道题是要计算从1900 到 1900 + N – 1年间的每个月的13号是星期五的频率,实际要求输出的是一个星期中每天出现的次数。首先确定的是平年还是闰年,然后用两个数组存储平年和闰年的每月的天数。明确一点就是从当前月到下一个的13号之间的天数就是当前月的天数,先确定上次13号是星期几,再加上当月的天数mod 7得到的就是下一次13号是星期几, 星期天则得到的数字是0,例如第一次1月13号是星期6,然后加上31对7 取余,得到下次是星期二。注意一点:到1900+N-1年时的最后一个月就不要加了,因为再加就是下一年了。最后循环求出结果即可。/*ID:yucept21LANG:C++TASK:f
阅读全文
posted @
2012-01-14 15:03
找回失去的
阅读(173)
推荐(0)
Section 1.1 gift1
摘要:这道题的题目要求是求每个人收到礼物的总价值和送出去礼物总价值的差值。关键点是每个人送出的礼物总价值和送给人数存在整除的关系,所以处理的时候要注意/和%的区别,然后用strcmp找到送或者收到礼物的人,在结构体数组相应的money加上或者减去相应的金额。/*ID:yucept21LANG:C++TASK:gift1*/#include<cstdio>#include<cstring>#include<cstdlib>int N;typedef struct p{ char na[15]; int ney;}G;G tt[15];void init(){ sca
阅读全文
posted @
2012-01-14 15:02
找回失去的
阅读(155)
推荐(0)
Section 1.1 ride
摘要:这道题是比较两个字符串根据A = 1,Z = 26这种关系来进行乘法运算得到的值a和bMod 47之后值的关系,相等输出“GO”,不相等输出“STAY”。/*ID:yucept21LANG:C++TASK:ride*/#include<cstdio>#include<cstring>#include<cstdlib>int main(){ freopen( "ride.in", "r", stdin); freopen( "ride.out", "w", stdout); cha
阅读全文
posted @
2012-01-14 15:01
找回失去的
阅读(166)
推荐(0)