acm全是操蛋的题,一开始想找一个大数组以电话号码的值作为数组的下标,后来发现不行越界了,后来又想弄个二维数组,前一维存电话号码的前3个。。。;后来感到自己是多么的愚蠢- -!一维都不行二维也是一样。。
后来的后来没办法了只有把所有输入的数据都存起来,然后排序比较
- /*
- * 1002.cpp
- *
- * Created on: 2010-8-11
- * Author: kevin
- */
- #include<iostream>
- #include<string>
- #include <algorithm>
- #include<vector>
- using namespace std;
- int main(){
- int n,len;
- int all=0;
- const int MAX=100000;
- string p;
- string op(8,'0');
- vector<string> v;
- vector<string>::iterator it,itend;
- int size[MAX]={0};
- cin>>n;
- while(n--){
- cin>>p;
- len=p.length();
- // int r=0;
- // for(int i=0;i<len;i++){
- // if(p[i]=='-')
- // continue;
- // cha[r++]=p[i];
- // }
- for(int i=0;i<len;i++){
- switch(p[i]){
- case 'A':case 'B':case 'C':p[i]='2';break;
- case 'D':case 'F':case 'E':p[i]='3';break;
- case 'G':case 'H':case 'I':p[i]='4';break;
- case 'J':case 'K':case 'L':p[i]='5';break;
- case 'M':case 'N':case 'O':p[i]='6';break;
- case 'P':case 'R':case 'S':p[i]='7';break;
- case 'T':case 'U':case 'V':p[i]='8';break;
- case 'W':case 'X':case 'Y':p[i]='9';break;
- default:break;
- }
- if(p[i]=='-'){
- p.erase(i,1);
- len=p.length();
- i--;
- }
- }
- for(int i=6;i>=3;i--)
- p[i+1]=p[i];
- p[3]='-';
- for(int i=0;i<8;i++)
- op[i]=p[i];
- v.push_back(op);
- }
- sort(v.begin(),v.end());
- it=v.begin();
- string tmp=*it;
- int k=0;
- for(it=v.begin()+1;it!=v.end();it++){
- if(tmp==*it){
- size[k]++;
- all=1;
- }else{
- tmp=*it;
- k++;
- }
- }
- if(all==0){
- cout<<"No duplicates."<<endl;
- return 0;
- }
- itend=unique(v.begin(),v.end());
- k=0;
- for(it=v.begin();it!=itend;it++,k++){
- if(size[k]==0)
- continue;
- cout<<(*it)<<' '<<size[k]+1<<endl;
- }
- return 0;
- }
结果内存5692K 时间1110ms不知道那些大牛是怎么弄出来那么少的时间- -!