11-散列1 电话聊天狂人 (25分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
输入格式:
输入首先给出正整数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分)相关推荐
- 11-散列1 电话聊天狂人 (25 分) (C语言)
浙大版<C语言程序设计实验与习题指导(第3版)>题目集 11-散列1 电话聊天狂人 (25 分) 二.题解 c代码 11-散列1 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出 ...
- 11-散列1 电话聊天狂人 (25 分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字构成的 ...
- 7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析
7-14 电话聊天狂人 (25 分)map做法 1:题目 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行 ...
- 7-3 电话聊天狂人 (25 分)
暑假字符串专题HBU程序设计训练营总结 ?点这里 7-3 电话聊天狂人 (25 分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为 ...
- 7-1 电话聊天狂人 (25分) PTA 数据结构
7-1 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10 5 ),为通话记录条数.随后N行,每行给出一条通话记录. ...
- 5-14 电话聊天狂人 (25分)/PTA
5-14 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤105),为通话记录条数.随后NN行,每 ...
- 5-14 电话聊天狂人 (25分)
5-14 电话聊天狂人 (25分) 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105≤ 10^5),为通话记录条数.随后N行,每行给出一条通话 ...
- 算法 散列1 电话聊天狂人
全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案 题目:给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105), ...
- 电话聊天狂人 (25 分)【简便解法】
立志用最少的代码做最高效的表达 给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤10^5),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这 ...
最新文章
- 12.文件系统——磁盘管理之RAID概述
- mac命令行将输出写入文件_如何在Linux中使用命令行将PDF文件转换为可编辑文本...
- 2018北大计算机复试线,2018年北京大学考研复试分数线已公布
- Java多线程基础知识(一)
- 怎么彻底移除虚拟机_Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法...
- ZOJ4037 Peer Review
- 盘点一款手机Python编程神器——AidLearning
- ElasticSearch介绍ES客户端IK分词器Kibana安装
- Ubuntu16.0.4 桌面美化 终端透明
- 修改服务器网卡速率,linux查看网卡速率命令(linux如何改网卡速率命令)
- 中国历史各王朝的知识点总结记忆
- 纯C语言实战-打字游戏
- 2019-11-14
- 马赛克与反马赛克技术
- 关于加快INSERT语句执行速度和 HINT /*+ append*/及nologging的使用
- OSChina 周一乱弹 ——周末就在家改Bug么
- cas:174899-82-2|1-乙基-3-甲基咪唑双(三氟甲磺酰)亚胺|EMIMTFSI
- Arch Linux 安装
- 天气预报在计算机的应用中是,计算机在天气预报中的应用.ppt
- FreeSWITCH 呼入系统的简要设计
热门文章
- 常见的操作系统与发展历史简介
- 一些时间的概念与区分(UTC、GMT、LT、TAI等)
- 折腾一下,Linux Mint 19 下工作
- Web前端如何进行SEO结构优化
- 一本超越期待的 C++ 书——简评 Boost程序库完全开发指南 深入C++ 准 标准库
- 机器自动翻译古文拼音 - 十大宋词 - 雨霖铃·寒蝉凄切 柳永
- 当你对未来迷茫的时候,请打开这个锦囊!
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
- 深圳云计算培训学习:构建企业级WIKI及工单系统 --【千锋】
- 日期解析:2021-05-15T23:30:00+08:00