社区讨论
求解 哈希40pts
P2037电话号码参与者 3已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo8pi6th
- 此快照首次捕获于
- 2023/10/27 22:26 2 年前
- 此快照最后确认于
- 2023/10/27 22:26 2 年前
RT
CPP#include <bits/stdc++.h>
using namespace std;
int n, sum1;
// unsigned int mp[100010];
const unsigned int hx = 1314;
struct aa{
char num[15];
unsigned int mp;
}ph[100010];
bool cmp(aa x, aa y){
return x.mp < y.mp;
}
char exchange(char x){
if(x >= 48 && x <= 57){
return x;
}
if(x <= 67){
return '2';
}
else if(x <= 70){
return '3';
}
else if(x <= 73){
return '4';
}
else if(x <= 76){
return '5';
}
else if(x <= 79){
return '6';
}
else if(x <= 83){
return '7';
}
else if(x <= 86){
return '8';
}
else if(x <= 89){
return '9';
}
return '0';
}
int main(){
// printf('0');
scanf("%d",&n);
for(int i = 1;i<=n;i++){
char a[1005];
// char ph[15];
scanf("%s",a);
int sum = 0;
for(int j = 0;j < strlen(a) ; j++){
if(sum == 7)
break;
if(a[j] != '-' && a[j] !='Q' && a[j] != 'Z'){
ph[i].num[++sum] = exchange(a[j]);
}
}
unsigned int type = 0;
for(int j = 1; j <= 7; j++){
type = (type + ph[i].num[j]) * hx;
}
ph[i].mp = type;
}
int ans = 0;
sort(ph+1,ph+n+1,cmp);
bool p = false;
for(int i = 1;i<=n;i++){
if(ph[i].mp == ph[i+1].mp ){
if(ans == 0)
ans+=2,p = true;
else
ans++;
}
else{
if(ans != 0){
for(int j = 1 ;j<=7;j++){
if(j == 4)
printf("-");
printf("%c",ph[i].num[j]);
}
printf(" %d\n",ans);
}
ans = 0;
}
}
if(p == false)
printf("No duplicates.");
// printf("%d",ans);
return 0;
}
// A,B 和 C 对应 2 D,E 和 F 对应 3
// G,H 和 I 对应 4 J,K 和 L 对应 5
// M,N 和 O 对应 6 P,R 和 S 对应 7
// T,U 和 V 对应 8 W,X 和 Y 对应 9
回复
共 3 条回复,欢迎继续交流。
正在加载回复...