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

给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。

输入格式:

输入首先给出正整数N(≤10​5​​),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。

输出格式:

在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。

输入样例:

4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832

输出样例:

13588625832 3

作者: DS课程组
单位: 浙江大学
时间限制: 400ms
内存限制: 64MB
代码长度限制: 16KB

思路:一道简单的散列表。取最后5位作为key,冲突时链表插入,相等时计数器加1。

代码:

#include<stdio.h>
#include<string>
long long max = 0, people = 0, id = -1;
struct node {long long date;long long count;struct node *next;
};
typedef struct node * List;
struct hashtable {long long table;List * list;
};
typedef struct hashtable * hash;
typedef struct node * position;
long long nextprime(long long n)
{long long i, j;for (i = n + 1;; i++){for (j = 2; j < i / 2; j++)if (!(i%j)) break;if (j == i / 2) return i;}
}
hash create(long long n)
{hash h = (hash)malloc(sizeof(hashtable));h->table = nextprime(n);h->list = (List *)malloc(sizeof(node)*(int)h->table);for (long long i = 0; i < h->table; i++){h->list[i] = (List)malloc(sizeof(node));h->list[i]->count = 0;h->list[i]->date = 0;h->list[i]->next = NULL;}return h;
}
void insert(hash h, long long key)
{long long k = key % h->table;position p = h->list[k]->next;while (p){if (p->date == key) break;p = p->next;}if (!p){p = (position)malloc(sizeof(node));p->date = key;p->count = 1;p->next = h->list[k]->next;h->list[k]->next = p;}else p->count++;if (p->count > max) {max = p->count;people = 1;id = p->date;}else if (p->count == max) {if (id == -1) id = key;else if (id > key) id = key;people++;}
}
void searchAndOut(hash h)
{if (people == 1) printf("%lld %lld\n", id, max);else printf("%lld %lld %lld\n", id, max, people);
}
int main()
{long long n, a, b;scanf("%lld", &n);hash h = create(2 * n);for (long long i = 0; i < n; i++){scanf("%lld %lld", &a, &b);insert(h, a);insert(h, b);}searchAndOut(h);
}

结尾:本来直接想把散列表定义拷上去的,但是学校网站进不去了。于是准备手撸一个,结果一路顺畅 (*^▽^*)

交上去以后最后一个测试点过不去,很郁闷,查了半个多小时才发现 把'>' 写成 ‘<’     (╯‵□′)╯︵┻━┻

现在想想完全可以定义一个struct node,然后用vector实现……下次有空试试

转载于:https://www.cnblogs.com/childwang/p/8280276.html

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. 11-散列1 电话聊天狂人 (25分)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. java.utilDate和java.sql.Date
  2. 丑憨批的爬虫笔记3(实例)
  3. Amazon:大数据分析技能,你满足几条?
  4. Kafka单机、集群模式安装详解(二)
  5. compiz把xfce4系统搞崩溃后的恢复方案
  6. iphone android传照片大小,iPhone与安卓跨平台如何传照片图文教程
  7. cad pu插件下载lisp_CAD自动编号lisp插件下载
  8. 2015/8/7 卖出中国软件,卖早了;5只不同形态的三角形震荡股票
  9. 华容道与数据结构 (续 3)
  10. Ubuntu 15.04 Gogs(git 版本库) 二进制安装
  11. 基于HTML5+CSS制作 H5移动端电商购物网页设计35页面(包括主页,商品详情,转账,付款,购物车等页面) 功能齐全...
  12. 计算机怎么格式化电脑吗,怎么格式化电脑
  13. Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
  14. promox VE各版本ISO下载及安装教程
  15. VMware 14 Pro 虚拟机下CentOS 7操作系统安装教程
  16. html p标签的补白,padding css内补白padding教程
  17. 如何看待侵权行为?有存在的合理性吗?
  18. LCD fb driver for linux 参数计算
  19. 怎样才能保证单元测试效果
  20. 博士之死背后异化的师生关系

热门文章

  1. Linux用户及用户组设置
  2. Java正则表达式实例详解
  3. 【EMNLP 2020】篇章要素识别和篇章结构评分(上)
  4. 推荐系统与GNN擦出的火花竟如此绚丽多彩
  5. 【面试经验】关于BERT,面试官们都怎么问
  6. 【论文串烧】基于特定实体的文本情感分类总结(PART I)
  7. 学术杂谈|一篇所有研究生都该读的好文:阳光温热 科研静好!
  8. 笔记_pytorch
  9. 谷歌高频面试题-较小的三数之和
  10. 机器学习基础算法21-多输出的决策树回归