社区讨论

求解 哈希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 条回复,欢迎继续交流。

正在加载回复...