北大ACM(POJ1002-487-3279)

时间:2024-06-01 09:06:38
Question:http://poj.org/problem?id=1002
问题点:字符映射、选重复项及排序。
 Memory: 1136K        Time: 813MS
Language: C++ Result: Accepted

4 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream> using namespace std;
const char mp[]={'','','','','','','','','','','','','','','','','','','','','','','','',''};
int mycmp(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}
int main()
{
bool duplicate=false;
int len;
char c[];//TIPS:该数组需要足够大的空间
char phone[][];//由于字符数组需要'\0'作为结束符,所以增加一位
memset(phone,,sizeof(phone));
cin>>len;
getwchar();
for(int i=;i<len;i++)
{
cin>>c;
int clen=strlen(c);
for(int ch=,j=;ch<clen;ch++)
{
if(c[ch]=='-') continue;
if(j==) phone[i][j++]='-';
if(c[ch]>='A'&&c[ch]<'Z') c[ch]=mp[c[ch]-'A'];
phone[i][j++]=c[ch];
}
}
qsort(phone,len,sizeof(phone[]),mycmp);
for(int m=,cnt=;m<len-;m++)
{
if(strcmp(phone[m],phone[m+])==)
{
cnt++;
duplicate=true;
if(m==len-) cout<<phone[m]<<" "<<cnt<<endl;
}
else
{
if(cnt>) cout<<phone[m]<<" "<<cnt<<endl;
cnt=;
}
}
if(!duplicate)
{
cout<<"No duplicates."<<endl;
}
return ;
}