模拟
#include<iostream>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<map>
using namespace std;
int vis[100000000];
int n,flag;
long long a[100005];
char s[400];
int chang(char x) {
if (x>='0'&&x<='9') {
int tmp=x-'0';
return tmp;
}
if (x>='A'&&x<='C') return 2;
if (x>='D'&&x<='F') return 3;
if (x>='G'&&x<='I') return 4;
if (x>='J'&&x<='L') return 5;
if (x>='M'&&x<='O') return 6;
if (x>='P'&&x<='S') return 7;
if (x>='T'&&x<='V') return 8;
if (x>='W'&&x<='Y') return 9; //返回对应的数值
}
int main() {
scanf("%d",&n);
flag=0;
for (int i=1; i<=n; i++) {
scanf("%s",s); //输入字符串
long long tmp=0;
for (int j=0; s[j]; j++) //如果s[j]存在
if (s[j]=='-') continue; //跳过
else tmp=tmp*10+chang(s[j]); //号码
vis[tmp]++; //标记出现过几次
a[i]=tmp; //记录号码
if (vis[tmp]>=2) flag=1; //如果大于两次 就记录 准备输出
}
if (!flag) {
printf("No duplicates.\n");
return 0;
}
sort(a+1,a+1+n); //出现的次数 默认升序
for (int i=1; i<=n; i++)
if (vis[a[i]]>=2) { //如果出现了两次 才输出
int kk=1000000;
int ans=a[i];
for (int j=1; j<=7; j++) {
int tmp=ans/kk; //取第一位
ans%=kk; // 取第一位之后的数字
kk/=10; //kk少一位0
printf("%d",tmp); //输出每一位
if (j==3) printf("-"); //记得输出-
}
printf(" %d\n",vis[a[i]]); //输出次数
vis[a[i]]=0; //再归零
}
return 0;
}