当前位置: 首页 > article >正文

OD C卷【热点网站统计】

题目

企业路由器的统计页面,有一个功能需要动态统计公司访问最多的网页URL top N,设计一个算法,可以高效动态统计TopN的页面;
输入描述:
每一行都是一个url 或者 一个数字;
如果是url,代表一段时间内的网页访问,如果是一个数字N,代表本次需要输出的TopN个url;
输入约束:
总访问网页数量小于5000个,单网页访问次数小于65535次;
网页url仅由字母、数字、点组成,且长度小于等于127字节;
数字是正整数,小于等于10且小于当前总访问网页数;
输出描述:
每个数字输入对应一行输出,输出按访问次数排序TopN个url,以逗号分隔;
输出要求:
每次输出要统计之前所有的输入;
如果有访问次数相等的url, 按url的字典序升序排列;

示例1
输入:
news.qq.com
news.sina.com.cn
news.qq.com
news.qq.com
game.163.com
game.163.com
www.huawei.com
www.cctv.com
3
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
3
输出:
news.qq.com,game.163.com,news.sina.com.cn
www.huawei.com,www.cctv.com,news.qq.com

示例2
输入:
news.qq.com
www.cctv.com
1
www.huawei.com
www.huawei.com
2
3
输出:
news.qq.com
www.huawei.com,news.qq.com
www.huawei.com,news.qq.com,www.cctv.com

 

解题代码

from functools import cmp_to_key


def cmp(a, b):
    if a[1] != b[1]:
        return b[1] - a[1]  # 降序
    elif a[0] != b[0]:
        return 1 if a[0] > b[0] else -1 # 升序
    else:
        return 0


urls = []
url_map = {}
def statistic(input_str):
    global urls
    global url_map
    n = int(input_str)  # top N
    j = 0
    while j < len(urls):
        if urls[j] not in url_map:
            url_map[urls[j]] = 1
        else:
            url_map[urls[j]] += 1
        j += 1

    url_count = sorted(list(url_map.items()), key=cmp_to_key(cmp), reverse=False)
    output_str = ""
    # 输出字符串
    for i in range(n):
        output_str += url_count[i][0] + ","
    return output_str[:-1]



result = ""
while True:
    try:
        # 输入
        input_str = input().strip()
        if input_str.isdigit():
            # 统计topN
            result+= statistic(input_str) + "\n"
            urls = []
        else:
            # 输入url地址,存入
            urls.append(input_str)
    except:  # 输入结束
        break

print(result[:-1])
 

http://www.kler.cn/a/427989.html

相关文章:

  • 【汽车电子架构】AutoSAR从放弃到入门专栏导读
  • 【ArcMap零基础训练营】03 常用数据网站的数据下载及处理
  • zabbix7 配置字体 解决中文乱码问题(随手记)
  • 【逻辑学导论第15版】A. 推理
  • 详解python的修饰符
  • 新版231普通阿里滑块 自动化和逆向实现 分析
  • 漫画之家Spring Boot应用:打造您的数字漫画馆
  • 如何从命令行和用户输入收集输入
  • 读取csv里面的文件数据画曲线
  • B4X编程语言:B4J控件的样式设置属性(Style/StyleClasses)
  • 利用R包QstFstComp包进行Qst-Fst分析
  • 处理海量数据的查重方法总结
  • 【WRF运行第一期(Ubuntu)】模型运行前准备
  • 高数极限与连续练习题(自用)
  • 网络渗透实验二(渗透课)
  • 新160个crackme - 109-Jony-crackme
  • ElementUI:el-tabs 切换之前判断是否满足条件
  • docker-3.docker权限问题
  • 开发一个AMT(automatic multicast tunnel)协议库 C++版本,Client,Server详细的设计
  • STM32F103单片机使用STM32CubeMX创建IAR串口工程
  • mac 安装python3和配置环境变量
  • 【Leetcode Top 100】146. LRU 缓存
  • Octo—— 基于80万个机器人轨迹的预训练数据集用于训练通用机器人,可在零次拍摄中解决各种任务
  • 网络资源模板--Android Studio 实现绿豆通讯录
  • 【springboot】 多数据源实现
  • 塑胶模具基本结构及塑胶成型原理