11-散列1 电话聊天狂人 (25分)
来源:互联网 发布:上海一橙网络报修电话 编辑:程序博客网 时间:2024/04/30 04:15
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。
输入格式:
输入首先给出正整数NN(\le 10^5≤10
5
),为通话记录条数。随后NN行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。
输出格式:
在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。
输入样例:
4
13005711862 13588625832
13505711862 13088625832
13588625832 18087925832
15005713862 13588625832
输出样例:
13588625832 3
代码(最后一个测试点超时了,想不到优化的方法了,如果有大神有话好了,评论区留言):
#include <iostream>#include <map>#include <set>#include <stdlib.h>#include <algorithm>using namespace std; struct person{ int cnt; string phone;};long long stringToint(string str){ int len = str.length(); char ch[len]; for ( int i = 0 ; i < len ; i++){ ch[i] = str[i]; } long long num = atoi(ch); return num; } bool cmp(struct person person1,struct person person2){ if (person1.cnt > person2.cnt){ return true; }else if (person1.cnt == person2.cnt){ long long p1 = stringToint(person1.phone); long long p2 = stringToint(person2.phone); if ( p1 < p2 ){ return true; } } return false;}int main(){ int len; map<string,int> map; set<string> phone; cin>>len; for (int i = 0 ; i < len ; i++){ string phone1,phone2; cin>>phone1>>phone2; phone.insert(phone1); phone.insert(phone2); if ( map.count(phone1) == 0){ map.insert(pair<string,int>(phone1,1)); }else{ int cnt = map.find(phone1)->second; cnt++; map.erase(map.find(phone1)); map.insert(pair<string,int>(phone1,cnt)); } if ( !map.count(phone2)){ map.insert(pair<string,int>(phone2,1)); }else{ int cnt = map.find(phone2)->second; cnt++; map.erase(map.find(phone2)); map.insert(pair<string,int>(phone2,cnt)); } } int size = phone.size(); struct person rank[size]; set<string>::iterator it = phone.begin(); int cnt = 0; for ( ; it != phone.end() ; it++){ rank[cnt].phone = *it; rank[cnt].cnt = map.find(rank[cnt].phone)->second; cnt++; } sort(rank,rank+size,cmp); int max = rank[0].cnt; int index = size-1; for ( int i = size-1 ; i > 0 ; i--){ if (rank[i].cnt != max){ index--; }else{ break; } } cout<<rank[0].phone<<" "<<max; if( index != 0){ cout<<" "<<index+1; } return 0;}
阅读全文
0 0
- 11-散列1 电话聊天狂人 (25分)
- 11-散列1 电话聊天狂人 (25分)
- 11-散列1 电话聊天狂人 (25分)
- 11-散列1 电话聊天狂人 (25分)
- 11-散列1 电话聊天狂人(25 分)
- 11-散列1 电话聊天狂人
- 11-散列1 电话聊天狂人
- 11-散列1 电话聊天狂人 (25分)
- 电话聊天狂人(25 分)(散列函数)
- 哈希表的使用-11-散列1 电话聊天狂人
- 5-20 电话聊天狂人 (25分)
- 5-14 电话聊天狂人 (25分)
- 5-14 电话聊天狂人 (25分)
- 电话聊天狂人(25 分)
- MOOC-数据结构 5-14 电话聊天狂人 (25分)
- 5-14 电话聊天狂人 (25分)/PTA
- 7-20 电话聊天狂人(25 分) (哈希)
- PAT 电话聊天狂人
- Java线程并发中的锁——Lock(上)
- zabbix自动发现
- 数据结构,循环队列各功能的实现
- HDU 1051 Wooden Sticks (贪心)
- "ORA-01779: 无法修改与非键值保存表对应的列"问题
- 11-散列1 电话聊天狂人 (25分)
- imx6ul之OpenWRT添加无线USB网卡
- 一篇文章告诉你,TLS 1.3 如何用性能为 HTTPS 正名
- Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法
- 设计模式C++实现(17)——命令模式
- 初学make与makefile
- redis安装及php-redis扩展安装
- 阿拉伯数字转中文
- BP神经网络