给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
输入格式:
输入首先给出正整数N(≤10 ^5),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。
输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。

输入样例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
输出样例:

13588625832 3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 12typedef struct ListNode *Position;
typedef struct HTable *HashTable;
struct ListNode {char data[N];int count;Position next;
};
struct HTable {Position list;int size;
};
HashTable CreatTable(int n);
void Insert(HashTable H, char *key);
void Solve(HashTable H);
int NextPrime(int n);int main() {int i, n;char key[N];HashTable H;scanf("%d", &n);H = CreatTable(n * 2);for (i = 0; i < 2 * n; i++) {scanf("%s", key);Insert(H, key);}Solve(H);return 0;
}HashTable CreatTable(int n) {HashTable H;int i;H = (HashTable)malloc(sizeof(struct HTable));H->size = NextPrime(n);H->list = (Position)malloc(H->size*sizeof(struct ListNode));for (i = 0; i < H->size; i++) H->list[i].next = NULL;  return H;
}void Insert(HashTable H, char *key) {Position p, temp;int h;h = (atoi(key + 6)) % H->size;p = H->list[h].next;while (p && strcmp(p->data, key)) {p = p->next;}if (p) p->count++;else {temp = (Position)malloc(sizeof(struct ListNode));strcpy(temp->data, key);temp->count = 1;temp->next = H->list[h].next;H->list[h].next = temp;}
}void Solve(HashTable H) {int i, max = 0, num;char min[N];Position p;for (i = 0; i < H->size; i++) {p = H->list[i].next;while (p) {if (p->count > max) {max = p->count;strcpy(min, p->data);num = 1;}else if (p->count == max) {num++;if (strcmp(p->data, min) < 0)strcpy(min, p->data);}p = p->next;}}if(num == 1)printf("%s %d\n", min, max);elseprintf("%s %d %d\n", min, max, num);}int NextPrime(int n) {int i, j;n = (n % 2) ? n + 2 : n + 1;for (i = n;; i += 2) {for (j = 3; j*j <= i && i%j; j++);if (j*j > i) break;}return i;
}

11-散列1 电话聊天狂人 (25分)相关推荐

  1. 11-散列1 电话聊天狂人 (25 分) (C语言)

    浙大版<C语言程序设计实验与习题指导(第3版)>题目集 11-散列1 电话聊天狂人 (25 分) 二.题解 c代码 11-散列1 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出 ...

  2. 11-散列1 电话聊天狂人 (25 分)

    给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的 ...

  3. 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析

    7-14 电话聊天狂人 (25 分)map做法 1:题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 ​5 ​​ ),为通话记录条数.随后N行 ...

  4. 7-3 电话聊天狂人 (25 分)

    暑假字符串专题HBU程序设计训练营总结 ?点这里 7-3 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​),为 ...

  5. 7-1 电话聊天狂人 (25分) PTA 数据结构

    7-1 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 ​5 ​​ ),为通话记录条数.随后N行,每行给出一条通话记录. ...

  6. 5-14 电话聊天狂人 (25分)/PTA

    5-14 电话聊天狂人   (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤10​5​​),为通话记录条数.随后NN行,每 ...

  7. 5-14 电话聊天狂人 (25分)

    5-14 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105≤ 10^5​​),为通话记录条数.随后N行,每行给出一条通话 ...

  8. 算法 散列1 电话聊天狂人

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10​5​​), ...

  9. 电话聊天狂人 (25 分)【简便解法】

    立志用最少的代码做最高效的表达 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这 ...

最新文章

  1. 12.文件系统——磁盘管理之RAID概述
  2. mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...
  3. 2018北大计算机复试线,2018年北京大学考研复试分数线已公布
  4. Java多线程基础知识(一)
  5. 怎么彻底移除虚拟机_Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法...
  6. ZOJ4037 Peer Review
  7. 盘点一款手机Python编程神器——AidLearning
  8. ElasticSearch介绍ES客户端IK分词器Kibana安装
  9. Ubuntu16.0.4 桌面美化 终端透明
  10. 修改服务器网卡速率,linux查看网卡速率命令(linux如何改网卡速率命令)
  11. 中国历史各王朝的知识点总结记忆
  12. 纯C语言实战-打字游戏
  13. 2019-11-14
  14. 马赛克与反马赛克技术
  15. 关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
  16. OSChina 周一乱弹 ——周末就在家改Bug么
  17. cas:174899-82-2|1-乙基-3-甲基咪唑双(三氟甲磺酰)亚胺|EMIMTFSI
  18. Arch Linux 安装
  19. 天气预报在计算机的应用中是,计算机在天气预报中的应用.ppt
  20. FreeSWITCH 呼入系统的简要设计

热门文章

  1. 常见的操作系统与发展历史简介
  2. 一些时间的概念与区分(UTC、GMT、LT、TAI等)
  3. 折腾一下,Linux Mint 19 下工作
  4. Web前端如何进行SEO结构优化
  5. 一本超越期待的 C++ 书——简评 Boost程序库完全开发指南 深入C++ 准 标准库
  6. 机器自动翻译古文拼音 - 十大宋词 - 雨霖铃·寒蝉凄切 柳永
  7. 当你对未来迷茫的时候,请打开这个锦囊!
  8. 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
  9. 深圳云计算培训学习:构建企业级WIKI及工单系统 --【千锋】
  10. 日期解析:2021-05-15T23:30:00+08:00