您的位置:首页 > 其它

【Peking University Online Judge】1002 (487-3279)

2015-01-30 20:15 381 查看
<pre name="code" class="plain">#include<stdio.h>
#include<ctype.h>
int compare_string(char*,char*);
void base_sort(char (*a)[7],int p,int q);
int main(void){
long n;
while(scanf("%ld",&n)!=EOF){
char c,a
[7];
int b
,index=0;
getchar();
for(int i=0;i<n;i++){
for(int j=0;j<7;j++){
while((c=getchar())=='-')
continue;
if(isalpha(c)){
if(c>'Q')
c-=1;
a[i][j]=(c-'A')/3+2+'0';
}else
a[i][j]=c;
}
b[i]=0;
while((c=getchar())=='-')
continue;
}
while((c=getchar())=='-')
continue;
base_sort(a,0,n-1);
for(int i=0;i<n;i++){
int j=i+1;
while(j<n&&compare_string(a[i],a[j])==0){
b[i]+=1;
b[j]=-1;
j++;
}
if(b[i]>0){
index=1;
for(int j=0;j<3;j++)
printf("%c",a[i][j]);
printf("-");
for(int j=3;j<7;j++)
printf("%c",a[i][j]);
printf(" %d\n",b[i]+1);
}
i=j-1;
}
if(index==0)
printf("No duplicates.\n");
}
return 0;
}
int compare_string(char* a,char* b){
for(int i=0;i<7;i++){
if(a[i]<b[i])
return -1;
if(a[i]>b[i])
return 1;
}
return 0;
}

void base_sort(char (*a)[7],int p,int q){
char b[10][q-p+1][7];
int d[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=6;i>=0;i--){
for(int j=p;j<=q;j++){
for(int k=0;k<7;k++)
b[a[j][i]-'0'][d[a[j][i]-'0']][k]=a[j][k];
d[a[j][i]-'0']++;
}
int h=0;
for(int j=0;j<10;j++){
for(int k=0;k<d[j];k++){
for(int l=0;l<7;l++)
a[p+h][l]=b[j][k][l];
h++;
}
d[j]=0;
}
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: