Volume 3.0 Elementary Skills
文章平均质量分 62
深蓝色的猫
一个努力成长为大牛的蒟蒻程序媛
展开
-
UVa OJ 10167
1、这道题不难,我却WA好几次,主要错在两点:1、把输出要求那里理解错了,题目的意思是两个数之间有一个空格,不是两组之间有一个空行。2、我只判断了left==right却没有判断相加是否等于n,这样在中间任何时刻左右相等都会退出,存在潜在bug。#includeusing namespace std;struct point{ int x,y;}a[55];int ma原创 2013-09-09 21:38:06 · 316 阅读 · 0 评论 -
UVa OJ 11205
1、这是一道好题。通过这道题,我学会了用二进制法来枚举子集。刚开始,我是使用位向量法,打算通过回溯法来枚举子集,相当麻烦不说,还陷入了死循环。后来采用二进制法,枚举子集就像枚举整数一样简单!2、要注意的就是变量的作用域,小心别搞错了。还有就是要查询一个数组里有没有两个相同的数的方法——不是O(n^2)枚举,而是先排序,再比较相邻的数。3、方法正确后,一次AC~#include#in原创 2013-09-10 00:19:35 · 508 阅读 · 1 评论 -
UVa OJ 131
1、这道题实际上就是考察二进制法枚举子集,但是要做出来还需要一些关于扑克的常识。2、我刚开始一点都不懂啦~不过看了这位ACMer的解题报告,按照他(她)所说的规则来写,就一次AC了~3、以下是规则链接:http://blog.csdn.net/frankiller/article/details/7843397#include#include#include#include原创 2013-09-11 01:30:52 · 315 阅读 · 0 评论 -
UVa OJ 10098
1、早知道有STL这种好东西,以前我写过的好多程序,其实实现起来可以不用那么麻烦的。。。#include#include#includeusing namespace std;int main(){ int T; char s[12]; scanf("%d",&T); while(T--){ scanf("%s",s)原创 2013-09-11 22:32:02 · 269 阅读 · 0 评论 -
UVa OJ 729
1、回溯法,一次AC~暴力题目貌似不是很难做的样子~#include#includeusing namespace std;int n,h;char s[20];void search(int floor,int num){ if(floor==n){ if(num==h){ for(int i=0;i原创 2013-09-11 23:41:39 · 459 阅读 · 1 评论 -
UVa OJ 146
1、这道题做的时候灵光一闪:从后往前扫描,需要找到第一次出现降序的地方(因为至少交换它们,所得排列一定比原来字典序大),然后求下一个排列,没有降序的话,说明不存在下一个排列。#include#include#includeusing namespace std;int main(){ char s[60]; while(scanf("%s",s)==1)原创 2013-09-11 22:20:56 · 422 阅读 · 0 评论 -
UVa OJ 592
#include#define DIVINE 0#define EVIL 1#define HUMAN 2#define DAY 0#define NIGHT 1#define MAXPERSONS 5#define STATENUM 486using namespace std;int state[STATENUM];int type(int state,原创 2013-09-17 01:36:14 · 335 阅读 · 0 评论 -
UVa OJ 110
1、太开心了~这道题写了整整两天终于AC了~这是一道非常奇葩的题目,要求编程来“制造”一个冒泡排序的程序。。。其实是求排列。。。用回溯法就好了。2、刚开始因为没把temp设成临时变量,怎么都不对,改了后又发现search函数的第一句应该用insert来修改而不是直接赋值,修改后居然WA,后来发现是看错了题目的输入。。。囧。。。第一个是测试数据组数,而不是n。。。改了后总算是AC了,相当有成就感原创 2013-09-18 21:47:47 · 340 阅读 · 0 评论