摘要: 题意:其实就是字母序号与数字序号的转换,有点类似字典序。解题思路:不论输入的是字符串还是数字都用一个字符数组来存储,只需要判断字符串的第一个字符是数字还是字母,然后分情况解决。众所周知,英文字母有26个,这就是重点所在。注意:当字符串很长时,所求的数字序号会超过整型范围,所以定义为long long型,或 __int 64.(但NYOJ不识别__int 64)。View Code 1#include<iostream>2#include<cstdio>3#include<cstring>4#include<stack>//栈操作5usingnam 阅读全文
posted @ 2012-03-09 09:08 笑巧 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 题意:就像查找一本字典,根据输入的条目和要查询的单词,给出查询结果(每个单词长度不超过10),所查单词数不超过100 000.解题思路:由于数据量很大,即使我用了scanf 和 printf 还是会超时。所以如果依次遍历要查找的单词速度很慢。后来发现用二分查找就很容易,但要二分必须对单词进行排序,故用到了标准库函数qsort进行快速排序。另外,对于数据输入需要特别注意,以前遇到过类似的情况,所以就学会了应用peek() 函数。函数peek()用于输入流中,并返回在流中的下一个字符或如果是处于被入的文件的结尾处返回EOF,peek()不会把字符从流中移除。所以必须用getchar() 来消除换行 阅读全文
posted @ 2012-03-07 10:05 笑巧 阅读(829) 评论(0) 推荐(0) 编辑
摘要: 解题思路:这是一个模拟题,其中命令F刚开始理解错了,这点是本题得难点所在。F命令为:把区域R填充为颜色(C)。R定义如下:若像素(X,Y)属于R,则所有与(X,Y)有公共边且颜色相同的像素也属于R。其实这跟我们以前做的搜索题能联系在一块儿,可以用递归实现。注意:图像的边界问题也要考虑。View Code 1#include<iostream>2usingnamespacestd;3charmap[255][255];4intn,m;5voidfill(charmap[255][255],intx,inty,intcold,intcnew)//命令F(搜索)6{7if(cold==c 阅读全文
posted @ 2012-03-02 09:13 笑巧 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 题意:其实就是两个大数相加的和。解题思路:由于输入方式不同,而位数N<=1000,000;所以很容易TLE,刚开始我定义了两个整型数组存放这两个大数,可是超时,后来查阅资料,发现开辟一个字符数组,在输入的过程中处理数据,就可以AC了。View Code 1#include<stdio.h>2intmain()3{4chara[1000002]={'0'};5intn,i;6intx,y;7scanf("%d",&n);8for(i=0;i<n;i++)9{10scanf("%d%d",&x,& 阅读全文
posted @ 2012-03-01 11:05 笑巧 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 题意:让电脑屏幕像液晶屏一样显示数字。解题思路:假设 s=1,每个数字都是‘ 日 ’上的笔画,分为三 ‘—’四‘|’,三行即:第一行,中间行,最底行;四列即:左上列,右上列,左下列,右下列。故用字符数组定义0-9这十个数字应显示的笔画,让后根据 s 的值来判定循环几次输出。注意:那些数字中的空白之处要填上空格,并且两个数字之间必须有一个空列。在每个整数后面输出一个空行。View Code 1#include<iostream>2#include<cstring>3usingnamespacestd;4charn1[]="--------";//第一行 阅读全文
posted @ 2012-03-01 10:44 笑巧 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 题目大意是给定两个整数n和m,求出长度为n+1满足条件的数列data的个数,数列的要求下:1)1<=data[i]<=m,for1<=i<=n2)data[n+1]=m;3)这个n+1个数满足:存在x1,x2,...,xn,xn+1,满足x1*data[1]+x2*data[2]+...+x(n+1)*data[n+1]=1;根据数论的知识,若存在这样的x1,x2...xn+1,则data[1],data[2]...data[n+1]的最大公约数为1证明:若data[1],data[2]...data[n+1]满足题意,并且存在最大公约数d(为整数);则x1*data[ 阅读全文
posted @ 2012-02-29 09:11 笑巧 阅读(431) 评论(0) 推荐(0) 编辑
摘要: 题意:给出两个字符串 a 和 b ,输出一个满足如下条件的最长串 x:x 的某两个排列分别是 a 和 b 的(不必连续的)子序列。如果有多个 x 满足条件,输出字典序最小的一个。解题思路:首先对两个字符串按字典序排序,然后再进行比较。注意:测试数据含有空格,所以不能用 cin 或 scanf 输入字符串。View Code 1#include<iostream>2#include<cstdio>3#include<algorithm>4#include<cstring>5usingnamespacestd;6chara[1005],b[1005] 阅读全文
posted @ 2012-02-29 09:05 笑巧 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 解题思路:这道题考察的是三维空间坐标xyz,必须具有丰富的想象力,像我这种对方向不敏感的人,只好多转转弯,比划比划。只要测试数据能看懂,那么题意就难能理解了。View Code 1#include<iostream>2#include<cstring>3usingnamespacestd;45intmain()6{7intm,n;8cin>>m;9while(m--){10cin>>n;11intx,y,z,l,p,u;12x=y=z=0;//起点(原点)13p=0;//当前方向14l=4;//左边的方向15u=2;//上边的方向16chars[ 阅读全文
posted @ 2012-02-25 17:53 笑巧 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 题意:给出 n 个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数。解题思路:采用几何中的三个点是否在一条直线上判定定理:(yi-yk)/(xi-xk)=(yj-yk)/(xj-xk),除法不能出现分母为0的情况,所以转换为乘法做,即:(yi-yk)*(xj-xk)=(yj-yk)*(xi-xk)(i、j、k共线)。View Code 1#include<iostream>2usingnamespacestd;3#defineMAX7054structPoint{5intx,y;6}p[MAX];7intmain()8{9intn,i,j,k,a 阅读全文
posted @ 2012-02-25 16:20 笑巧 阅读(1329) 评论(0) 推荐(0) 编辑
摘要: 题意:在他走第 i 次的时候,只按动可以被 i 整除的位置(位置编号为 1 到 n )上的开关。判断最后一个灯泡的最终状态。解题思路:令d(n) 为自然数 n 的因子个数,不及重复的因子。当且仅当 n 为完全平方数时,d(n) 为奇数;这是因为 n 的因子是成对出现的,也即当 n=a*b 且 a!=b 时,必有两个因子 a 、b;只有 n 为完全平方数,也即当 n=a2时,才会出现 d(n) 为奇数的情形。注意:n 的范围:n<=232-1,n 必须定义为 unsigned int 型。View Code 1#include<iostream>2#include<cma 阅读全文
posted @ 2012-02-24 22:05 笑巧 阅读(483) 评论(0) 推荐(0) 编辑