UVa 725 Division

题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=9&page=show_problem&problem=666

理解

提议比较简单,给你0~9这十个数字,要求将其组合为两个五位数X和Y,使得其满足X/Y=N这样的形式。然后就想到了用STL里面的next_permutation函数,很快把代码写了出来,中间还用到了queue来存储答案。不过WA了两发之后开始怀疑是不是STL效率太低导致T了,改用数组模拟,但是还是WA了。经过三个小时的漫长Debug之路,才发现原来问题出在输入输出我多输出了一个空行!!! 真的是。。。太。。。

Read More

CodeVS 1012 最大公约数和最小公倍数问题

题目

源地址:

http://codevs.cn/problem/1012/

理解

自然是水题= =。只要用一个循环就可以搞定,最大公约数用gcd,最小公倍数就是i*j/gcd(i,j),没有什么问题。 不过这个题意不是很清晰,是否为同一组数字的判断并没有讲到。实际上,3 6060 3是两组数组。这个理解上的问题,导致我的结果一直都是标准答案的一半,折腾了一会儿。 除此之外,这个简单的思路还有很多可以优化的地方,比如在判断了gcd是否等于x之后,后面判断最小公倍数只要使用i*j/x就可以了;还有,一开始令i=x之后,后面每一次都递增x就可以保证i与j始终为x的约束,但注意,还是要用gcd来判断最大公约数是不是x;过题之后找了一下题解,发现有人提出,循环的最大值是sqrt(y),稍微想了想,确实如此,这个优化也能省下很多循环。

Read More

UVa 445 Marvelous Mazes

题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=386

理解

我又逗了= =。 题意很简单,给你指定规则的字符串,要求你转换成一个图。 我写了一个特别复杂的实现,结果总是得不到想要的结果。后来才意识到switch语句妙用,顿感自己太不机智了。 实际上,只要对每一个字符进行判断就可以了,如果是数字就叠加起来得到c,如果是b就输出前面算出的c个空格,如果是!就输出回车,如果是字母就输出前面算出来的c个字母。根本就不需要进行复杂的正数处理操作,涨姿势了。 除此之外,还有没有必要等到全部输入完了之后再进行处理。因为本地编译的时候看起来输入和输出混在了一起,实际上,输入来自于stdin,输出来自于stdout,是不会出现混淆的。所以可以放心大胆地进行单行处理,这样就省掉一个超大的二维数组。

Read More

UVa 490 Rotating Sentences

题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=show_problem&problem=431

理解

题意很好理解,就是将字符串旋转九十度。 一开始脑洞开的比较大,想要搞两个字符串数组,然后两个for遍历。后来仔细想想根本就不需要,只要在输出的时候,处理一下顺序就可以了。 然后被卡在了输入输出上面,之前没有做过这种类型的题目,不知道单组的输入怎么结束。后来听学长解释才明白,就算是单组,也可以用EOF来结束的,之后的问题就比较简单了。但是提交之后,挂了一发PE。仔细检查之后,认为问题出在题目中输入的那个换行,除此之外,还有自己先前调用的一个计数变量i的值比应有的值多了1。 Debug之后,幸福的A了

Read More

UVa 494 Kindergarten Counting Game

题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=435

理解

同样是一道很简单的题目。 只要求出给定的一句话中出现的单词的个数,有两个地方需要注意。 - 输入应当注意不能使用scanf("%s", str)这样的写法,会直接停在有空格的地方。采用getline是一个好主意,不过输入的效率会比较低,要是比较虚的话,可以用速度快一点的gets。 - 具体的单词判断上,我一开始犯了一个错误,认为只要判断空格的个数就OK了,实际上,a_a是两个单词。

Read More