您的位置:首页 > 其它

poj 1002之我见

2013-01-15 14:54 218 查看
#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

using namespace std;

//出现Runtime Error可能原因是分配的局部的数组空间不够,之运行中出现此类错误

//使用每加入一个都计数的方式可能会导致Time Limit Exceeded

//最好使用一次排序并且一次遍历计数的方式

//q没有映射,暂记为1

char map[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9'};

//struct N{

// int data;

// int times;

//};

int nums[100005];

int cmp(const void *n1,const void *n2){

 return *(int *)n1 - *(int *)n2;

}                

int main(){

 int num;

 scanf("%d",&num);

 for(int i=0;i<num;i++){

  int now=0;

  char worknum[256];

  scanf("%s",&worknum);

  int index=0;//写入指针index4为扫描指针

  for(int index4=0;index4<strlen(worknum);index4++){

   if(worknum[index4]>='A'&&worknum[index4]<='Z'){

    worknum[index]=map[worknum[index4]-'A'];

    index++;

   }

   else if(worknum[index4]>='0'&&worknum[index4]<='9'){

    worknum[index]=worknum[index4];

    index++;

   }

   else

    continue;

  }

  worknum[index]='\0';

  //使用将字符创数字转化为int行的函数,一定要熟练。

  now=atoi(worknum);

  nums[i]=now;

  //查找有没有now

  //bool flag=false;

  //for(int j=0;j<=index2;j++){

  // if(nums[j].data==now){

  //  nums[j].times++;

  //  flag=true;

  // }

  //}

  //if(!flag){

  // index2++;

  // nums[index2].data=now;

  // nums[index2].times=1;

  //}

 }

 qsort(nums,num,sizeof(int),cmp);

 int dup=0;

 int count=1;

 for(int k=0;k<num;k++){

  if(nums[k]==nums[k+1]){

   count++;

  }

  else{

   if(count!=1){

    dup++;

    int head=nums[k]/10000;

    int tail=nums[k]%10000;

    printf("%03d-%04d %d\n",head,tail,count);

    count=1;

   }

  }

 }

 if(dup==0)

  printf("No duplicates.\n");

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: