百度首页 | 百度空间
 
查看文章
 
pku1002解题报告
2006-12-09 16:01

pku前面的题目都是关于输入输出的题目,虽然不难,但是想一次就AC也不是件容易的事情。

1002这道题目涉及输入、转换、排序、格式输出问题。

其中有些技巧:

1。用scanf和printf进行输入输出,比iostream效率高很多,最少一个数量级。

2。进行转换时用到了查表方法,很不错哦……

3。排序不用多说,冒泡肯定不行,效率太低,用STL的sort。

4。边算边输。

×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××

source code

#include<stdio.h>
#include<algorithm>
using namespace std;

int main()
{
 int array[200000];//用于存储号码信息,记住一定要开大
 char map[] = "22233344455566677778889999";//转换时查表用
    memset(array,0,100001);//把array的元素都设为0
 char temp[100];//用于接收输入信息
 long n,k=0;//n是接收n个号码的个数,k是一个下标
 int count=1;//用于计数相同的号码个数,用于判断和输出
    bool open=false;//判断是否各个号码都不相同

    scanf("%d",&n);//接收个数信息
 while(k<n)//接收号码信息和转换操作
 {
  scanf("%s",temp);
  for(int i=0;temp[i];i++)
  {
    if(temp[i]<='9'&&temp[i]>='0')
    {
     array[k] = array[k]*10 + temp[i] - '0';
    }
    else if(temp[i]<'Z'&&temp[i]>='A')
     array[k] = array[k]*10 + map[temp[i] - 'A'] - '0';
  }
  k++;
 }
 
 sort(array,array+n);//排序

    for(k=0;k<n-1;k++)//输出
 {

  if(array[k] == array[k+1])
  {
   open = true;
   count++;
  }

  else if(count!=1)
  {
   printf("%03d-%04d %d\n",array[k]/10000,array[k]%10000,count);
   count = 1;
  }
 }
 
 if(count!=1)
 {
   printf("%03d-%04d %d\n",array[k]/10000,array[k]%10000,count);
   count = 1;
 }

 if(open == false)
  printf("No duplicates.\n");//无相同号码
 
    return 0;
}


类别:玩耍 | 添加到搜藏 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2008-07-02 18:15
你这个执行要多久啊?我那个费率好大的劲过了,不过执行要600多毫秒,好郁闷啊。
 
2
2008-07-21 23:03
这题太XXX恶心了……说白了就是和C++有关的东西(除了sort)全部不能用……一用就超……
 
3
2008-07-28 19:16
为何array的空间需要那么大,不是100000就足够了吗?我用100000,但是提交通不过,为什么呢?
 
4
2008-07-30 00:02
当时我也用的100000提交的,也是挂了,后来直接写成200000就过了,可能数据有些超吧
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu