1002p

来源:互联网 发布:软件著作权申请官费 编辑:程序博客网 时间:2024/05/20 11:52

acm全是操蛋的题,一开始想找一个大数组以电话号码的值作为数组的下标,后来发现不行越界了,后来又想弄个二维数组,前一维存电话号码的前3个。。。;后来感到自己是多么的愚蠢- -!一维都不行二维也是一样。。

后来的后来没办法了只有把所有输入的数据都存起来,然后排序比较

Code:
  1. /*  
  2.  * 1002.cpp  
  3.  *  
  4.  *  Created on: 2010-8-11  
  5.  *      Author: kevin  
  6.  */  
  7. #include<iostream>   
  8. #include<string>   
  9. #include <algorithm>   
  10. #include<vector>   
  11. using namespace std;   
  12. int main(){   
  13.     int n,len;   
  14.     int all=0;   
  15.     const int MAX=100000;   
  16.     string p;   
  17.     string op(8,'0');   
  18.     vector<string> v;   
  19.     vector<string>::iterator it,itend;   
  20.     int size[MAX]={0};   
  21.     cin>>n;   
  22.     while(n--){   
  23.         cin>>p;   
  24.         len=p.length();   
  25. //      int r=0;   
  26. //      for(int i=0;i<len;i++){   
  27. //          if(p[i]=='-')   
  28. //              continue;   
  29. //          cha[r++]=p[i];   
  30. //      }   
  31.         for(int i=0;i<len;i++){   
  32.             switch(p[i]){   
  33.             case 'A':case 'B':case 'C':p[i]='2';break;   
  34.             case 'D':case 'F':case 'E':p[i]='3';break;   
  35.             case 'G':case 'H':case 'I':p[i]='4';break;   
  36.             case 'J':case 'K':case 'L':p[i]='5';break;   
  37.             case 'M':case 'N':case 'O':p[i]='6';break;   
  38.             case 'P':case 'R':case 'S':p[i]='7';break;   
  39.             case 'T':case 'U':case 'V':p[i]='8';break;   
  40.             case 'W':case 'X':case 'Y':p[i]='9';break;   
  41.             default:break;   
  42.             }   
  43.             if(p[i]=='-'){   
  44.                 p.erase(i,1);   
  45.                 len=p.length();   
  46.                 i--;   
  47.             }   
  48.         }   
  49.         for(int i=6;i>=3;i--)   
  50.             p[i+1]=p[i];   
  51.         p[3]='-';   
  52.         for(int i=0;i<8;i++)   
  53.             op[i]=p[i];   
  54.         v.push_back(op);   
  55.     }   
  56.     sort(v.begin(),v.end());   
  57.     it=v.begin();   
  58.     string tmp=*it;   
  59.     int k=0;   
  60.     for(it=v.begin()+1;it!=v.end();it++){   
  61.         if(tmp==*it){   
  62.             size[k]++;   
  63.             all=1;   
  64.         }else{   
  65.             tmp=*it;   
  66.             k++;   
  67.         }   
  68.     }   
  69.     if(all==0){   
  70.         cout<<"No duplicates."<<endl;   
  71.         return 0;   
  72.     }   
  73.     itend=unique(v.begin(),v.end());   
  74.     k=0;   
  75.     for(it=v.begin();it!=itend;it++,k++){   
  76.         if(size[k]==0)   
  77.             continue;   
  78.         cout<<(*it)<<' '<<size[k]+1<<endl;   
  79.     }   
  80.     return 0;   
  81. }   

结果内存5692K  时间1110ms不知道那些大牛是怎么弄出来那么少的时间- -!