初看起來,這道題很簡單,我以為很快能搞定,結果花了兩個晚上。其實是處理字符串不熟練,加上犯些比較白癡又不容易看出來的小錯誤,排序總出問題,好不容易出了樣例的正確結果,一提交,結果TLE。qsort,sort我都基本不會用,還好,有5isoft同志的熱心幫忙,把排序搞定了,然后再處理一下累計次數(shù),就AC了。調程序調到脾氣暴躁了,可憐了我的鍵盤啊……
未央C++博客代碼:
Source Code
Problem: 1002 |
|
User: wic |
Memory: 1528K |
|
Time: 485MS |
Language: C++ |
|
Result: Accepted |
- Source Code
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int map[25]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,9,9,9};
char a[100002][9];
char b[9],c[50];
int aa[100002];
int comp(const void *p1, const void *p2)//快排的比較標準
{
return (strcmp(( char*)p1,(char*)p2));
}
int main()
{
int n,i,j=0,k=0,l,m;
cin>>n;
b[3]='-';
for(j=0; j<n; j++){
scanf("%s",c);
l=strlen(c);
m=0;
for(i=0; i<l; i++){
if(m==3)
m++;
if(c[i]<='9'&&c[i]>='0')
b[m]=c[i];
else if(c[i]<'Z'&&c[i]>='A')
b[m]=map[c[i]-'A']+'0';
else
continue;
m++;
}
strcpy(a[j],b);
}
qsort(a,n,9,comp);//最關鍵的排序
for(i=0; i<n; i=k)//這個方法是曾經(jīng)聽lzm同學的思想,代碼是自己實現(xiàn)的
for(j=i+1; j<=n; j++){
if(strcmp(a[i],a[j])==0)
aa[i]++;
else
{ k=j; break;}
}
int have=0;
for(i=0; i<n; i++)
if(aa[i]>0){
printf("%s %d\n",a[i],aa[i]+1);
have=1;
}
if(have==0)
printf("No duplicates.\n");
return 0;
}
|