水牛♂ToTo

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
这道题本上没什么难度,就是测试数据太bt,不是超时就是超内存,搞了好一阵子,尝试了n种方法,最后选用了简单方便的map容器。只不过时间超的厉害.附poj1002 code:

#include<iostream>
#include<map>
#include<math.h>
#include<string.h>
using namespace std;

char search(char c){
    if(c=='A'||c=='B'||c=='C')
        return '2';
    if(c=='D'||c=='E'||c=='F')
        return '3';
    if(c=='G'||c=='H'||c=='I')
        return '4';
    if(c=='J'||c=='K'||c=='L')
        return '5';
    if(c=='M'||c=='N'||c=='O')
        return '6';
    if(c=='P'||c=='R'||c=='S')
        return '7';
    if(c=='T'||c=='U'||c=='V')
        return '8';
    if(c=='W'||c=='X'||c=='Y')
        return '9';
    else
        return '0';
}

int main(){
    typedef map<int,int> UDT_MAP_INT_INT;
    int n,j,k,integer;
    while(scanf("%d",&n)!=-1){
        UDT_MAP_INT_INT number;   
        char t[255],num[9];   
        UDT_MAP_INT_INT::iterator ti;
        while(n--){
            scanf("%s",t);
            k=0;
            for(j=0;j<(int)strlen(t);j++){
                if(t[j]=='-')
                    continue;
                if(t[j]>=48&&t[j]<=57)
                    num[k++]=t[j];
                else{
                    num[k++]=search(t[j]);
                }
            }
            num[k]='\0';
            integer=(num[0]-48)*(int)pow(10-0.0,6-0.0)+(num[1]-48)*(int)pow(10-0.0,5-0.0)+(num[2]-48)*(int)pow(10-0.0,4-0.0)+(num[3]-48)*(int)pow(10-0.0,3-0.0)+(num[4]-48)*(int)pow(10-0.0,2-0.0)+(num[5]-48)*10+(num[6]-48);
           
            ti=number.find(integer);
            if(ti==number.end()){
                number.insert(map<int, int> :: value_type(integer, 1));
            }
            else{
                ti->second++;
            }
        }
        int f=1;
        UDT_MAP_INT_INT::iterator it=number.begin();
        for(;it!=number.end();it++){
            if(it->second>1){
                printf("%03d-%04d %d\n",it->first/10000,it->first%10000,it->second);
                f=0;
            }
        }
        if(f)
            printf("No duplicates.\n");
    }
}


posted on 2007-08-03 20:58  saintqdd  阅读(1842)  评论(0)    收藏  举报