poj1002“487-3279”解题报告

来源:互联网 发布:淘宝上怎么买香烟 编辑:程序博客网 时间:2024/06/06 15:02

该题思路非常简单,三步:

(1)想方设法去掉‘-’字符;

(2)将字母转化成为对应的数字,注意对含有Q、Z这两个字符的处理,以及连续多个‘-’字符的处理(自己在这两个地方弄了好长时间,最后发现其实挺简单的哈);

(3)调用系统排序函数进行排序,输出格式化。

下面的代码是将自己原始的代码整理后所得,为了给大家一个清晰地代码:

#include<iostream>#include<string>#include<map>#include<algorithm>using namespace std;int main(){freopen("in.txt","r",stdin);map<string,int> Map;int n;cin>>n;string* s_arr=new string[n];int count=0;for(int k=0;k<n;++k){string str;cin>>str;bool flag=false;//对含有Q、Z字符的处理//处理'-'字符,并作字母向数字的转换for(string::iterator iter=str.begin();iter!=str.end();++iter){while('-'==(*iter)&&iter!=str.end()){str.erase(iter);if(iter==str.end())iter--;}if((*iter)>='A'&&(*iter)<='Z'){switch(*iter){case 'A':case 'B':case 'C':(*iter)='2'; break;case 'D':case 'E':case 'F':(*iter)='3'; break;case 'G':case 'H':case 'I':(*iter)='4'; break;case 'J':case 'K':case 'L':(*iter)='5'; break;case 'M':case 'N':case 'O':(*iter)='6'; break;case 'P':case 'R':case 'S':(*iter)='7'; break;case 'T':case 'U':case 'V':(*iter)='8';break;case 'W':case 'X':case 'Y':(*iter)='9'; break;default:flag=true;break;}}}string::iterator it=str.end()-1;if('-'==(*it))str.erase(it);if(!flag){s_arr[count]=str;Map[s_arr[count]]++;count++;}}sort(s_arr,s_arr+count);bool flag_1=false;for(int i=0;i<count;++i){if(Map[s_arr[i]]>1){int num=Map[s_arr[i]];Map[s_arr[i]]=0;s_arr[i].insert(3,"-");flag_1=true;cout<<s_arr[i]<<" "<<num<<endl;}}if(!flag_1){cout<<"No duplicates."<<endl;}return 0;}


下面的代码是自己的原始代码,曾经时间超时,曾经wrong answer,经过多次的修改,终于AC了,这个代码比较杂乱,供有兴趣的人参考哈,代码如下:

#include<iostream>#include<string>#include<map>#include<algorithm>using namespace std;int main(){//freopen("in.txt","r",stdin);map<string,int> Map;int n;cin>>n;string* s_arr=new string[n];int count=0;for(int k=0;k<n;++k){string str;cin>>str;bool flag=false;//对含有Q、Z字符的处理//处理'-'字符,并作字母向数字的转换for(string::iterator iter=str.begin();iter!=str.end();++iter){while('-'==(*iter)&&iter!=str.end()){str.erase(iter);if(iter==str.end())iter--;}//if('-'==(*iter))//{//str.erase(iter);//while('-'==(*iter))//{//str.erase(iter);//}//if(iter==str.end())//break;//}if((*iter)>='A'&&(*iter)<='Z'){switch(*iter){case 'A':case 'B':case 'C':(*iter)='2'; break;case 'D':case 'E':case 'F':(*iter)='3'; break;case 'G':case 'H':case 'I':(*iter)='4'; break;case 'J':case 'K':case 'L':(*iter)='5'; break;case 'M':case 'N':case 'O':(*iter)='6'; break;case 'P':case 'R':case 'S':(*iter)='7'; break;case 'T':case 'U':case 'V':(*iter)='8';break;case 'W':case 'X':case 'Y':(*iter)='9'; break;default:flag=true;break;}}}string::iterator it=str.end()-1;if('-'==(*it))str.erase(it);if(!flag){s_arr[count]=str;Map[s_arr[count]]++;count++;}//Map[str]++;}sort(s_arr,s_arr+count);//for(int i=0;i<count;++i)//{//Map[s_arr[i]]++;//}bool flag_1=false;//for(map<string,int>::iterator iter=Map.begin();iter!=Map.end();++iter)//{//if(iter->second>1)//{//flag_1=true;//string t_str=iter->first;//t_str.insert(3,"-");//此处应该仍可优化//cout<<t_str<<" "<<iter->second<<endl;//}//}for(int i=0;i<count;++i){if(Map[s_arr[i]]>1){int num=Map[s_arr[i]];Map[s_arr[i]]=0;s_arr[i].insert(3,"-");flag_1=true;cout<<s_arr[i]<<" "<<num<<endl;}}if(!flag_1){cout<<"No duplicates."<<endl;}//cout<<str<<endl;//将所有的字母全部转为对应的数字//for(int i=0;i<str.length();++i)//{//switch(str[i])//{//case 'A'://case 'B'://case 'C':str[i]='2'; break;//case 'D'://case 'E'://case 'F':str[i]='3'; break;//case 'G'://case 'H'://case 'I':str[i]='4'; break;//case 'J'://case 'K'://case 'L':str[i]='5'; break;//case 'M'://case 'N'://case 'O':str[i]='6'; break;//case 'P'://case 'R'://case 'S':str[i]='7'; break;//case 'T'://case 'U'://case 'V':str[i]='8';break;//case 'W'://case 'X'://case 'Y':str[i]='9'; break;//default://break;//}//}////cout<<str<<endl;//Map[str]++;//}//输出格式化//string* s_arr=new string[n];//int loc=0;//for(map<string,int>::iterator iter=Map.begin();iter!=Map.end();++iter)//{//if(iter->second!=1)//{//s_arr[loc]=iter->first;//loc++;//}//}////调用系统函数,对s_arr进行排序//sort(s_arr,s_arr+loc);//bool flag=false;//for(map<string,int>::iterator iter=Map.begin();iter!=Map.end();++iter)//{//for(int i=0;i<loc;++i)//{//if(s_arr[i]==iter->first)//{//flag=true;//s_arr[i].insert(3,"-");//cout<<s_arr[i]<<" ";//cout<<iter->second<<endl;//}//}//}//if(!flag)//{//cout<<"No duplicates"<<endl;//}return 0;}


 

 

原创粉丝点击