初看起來(lái),這道題很簡(jiǎn)單,我以為很快能搞定,結(jié)果花了兩個(gè)晚上。其實(shí)是處理字符串不熟練,加上犯些比較白癡又不容易看出來(lái)的小錯(cuò)誤,排序總出問(wèn)題,好不容易出了樣例的正確結(jié)果,一提交,結(jié)果TLE。qsort,sort我都基本不會(huì)用,還好,有5isoft同志的熱心幫忙,把排序搞定了,然后再處理一下累計(jì)次數(shù),就AC了。調(diào)程序調(diào)到脾氣暴躁了,可憐了我的鍵盤啊……
未央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)//快排的比較標(biāo)準(zhǔn)
{
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);//最關(guān)鍵的排序
for(i=0; i<n; i=k)//這個(gè)方法是曾經(jīng)聽lzm同學(xué)的思想,代碼是自己實(shí)現(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;
}
|