UVa:755 - 487--3279
2014-06-03 11:30
375 查看
题意:找出有重复的电话号码,输出这些号码的标准形式和出现的次数。
当电话号码不足7位时,用‘0’补位。
刚开始以为用边输入边比较,最后排序输出是最高效的算法,但一直Time limit exceeded,“山外青山楼外楼”,网友们的算法更是巧妙和高效啊,涨姿势了。
发现一点:用sort函数无法对二维字符数组进行排序,只能将二维数组转换成结构体数组,再对结构体数组进行排序。
Code:
--------------------------------------------------------------------------------------------
Keep It Simple,Stupid!
--------------------------------------------------------------------------------------------
当电话号码不足7位时,用‘0’补位。
刚开始以为用边输入边比较,最后排序输出是最高效的算法,但一直Time limit exceeded,“山外青山楼外楼”,网友们的算法更是巧妙和高效啊,涨姿势了。
发现一点:用sort函数无法对二维字符数组进行排序,只能将二维数组转换成结构体数组,再对结构体数组进行排序。
Code:
#include<stdio.h> #include<string.h> #include<ctype.h> #include<algorithm> using namespace std; struct DS{ char pn[300]; }; DS ds[100010]; char mapn[30]="22233344455566670778889990",s[300]; bool cmp(DS a,DS b) { return strcmp(a.pn,b.pn)<0; } int main() { int N; scanf("%d",&N); while(N--){ int n; scanf("%d",&n); getchar(); for(int i=0;i<n;i++){ int t=0; char ch; memset(s,0,sizeof(s)); while(ch=getchar()){ if(ch!='\n'){ if(isalpha(ch)){ int e=ch-'A'; s[t++]=mapn[e]; } if(isdigit(ch)) s[t++]=ch; } else break; } if(t<7){ for(int j=t;j<7;j++) s[j]='0'; } s[7]='\0'; strcpy(ds[i].pn,s); } sort(ds,ds+n,cmp); int num=0,p=0,j=0; for(int i=0;i<n;i++){ if(strcmp(ds[j].pn,ds[i].pn)==0) num++; else{ if(num>1){ p=1; for(int k=0;k<7;k++){ printf("%c",ds[j].pn[k]); if(k==2) printf("-"); } printf(" %d\n",num); } j=i; num=1; } if(i==n-1&&num>1){ p=1; for(int k=0;k<7;k++){ printf("%c",ds[j].pn[k]); if(k==2) printf("-"); } printf(" %d\n",num); } } if(!p) printf("No duplicates.\n"); if(N) printf("\n"); } return 0; }
--------------------------------------------------------------------------------------------
Keep It Simple,Stupid!
--------------------------------------------------------------------------------------------
相关文章推荐
- UVa755 487-3279
- UVa 755 - 487--3279
- uva 755 - 487--3279
- uva 755 487--3279
- UVa 755 - 487--3279
- UVA - 755 487--3279
- UVa 755 / POJ 1002 - 487-3279
- uva 755 487--3279(检索+排序)
- UVA 755 - 487--3279
- POJ 1002 UVA 755 487--3279 电话排序 简单但不容易的水题
- Uva 755 - 487--3279
- UVa 755 487--3279
- UVa 755 487-3279
- uva 755 487--3279
- UVa 755 487-3279
- UVa 755 - 487--3279
- UVa_OJ 755 487-3279
- Uva-755-487--3279
- uva 755 487--3279(字母与数字处理)
- UVA 755 - 487--3279