codeforces 刷题指南

https://blog.csdn.net/qq_16964363/article/details/79224776
主要参考这篇文章,侵删。

近期cf上线了难度指数功能,将每道题的难度量化。那么我根据这篇博主的启发, 做了个爬虫来对每个分类的难度进行分析。先上爬虫代码:

# -*- coding: utf-8 -*-

import json
import urllib.request

from bs4 import BeautifulSoup
sum_difficulty = {}
avg_difficulty = {}
min_difficulty = {}
max_difficulty = {}
problems_count = {}

max_page = 48

for i in range(1, max_page):
    print ('parsing page %d' % i)
    url='http://codeforces.com/problemset/page/%s'%str(i)
    data=urllib.request.urlopen(url).read() #发起请求并读取回应 
    data=data.decode('UTF-8') 

    soup = BeautifulSoup(data, 'html.parser')

    for p in soup.find(class_='problems').find_all('tr'):
        tds = p.find_all('td')
        if len(tds) != 5:
            continue
        
        difficulty_span = tds[3].span
        if difficulty_span is None:
            continue

        difficulty = int(difficulty_span.string)

        for notice in tds[1].find_all(class_='notice'):
            tag=notice.string
            if (tag in problems_count) == False:
                # 初始化
                problems_count[tag] = 0
                sum_difficulty[tag] = 0
                min_difficulty[tag] = 10000
                max_difficulty[tag] = -1
            
            #迭代
            problems_count[tag] += 1
            sum_difficulty[tag] += difficulty
            min_difficulty[tag] = min(min_difficulty[tag], difficulty)
            max_difficulty[tag] = max(max_difficulty[tag], difficulty)

for tag in problems_count:
    avg_difficulty[tag] = sum_difficulty[tag]//problems_count[tag]


print ('标签,题目数,平均难度,最高难度,最低难度')

d = sorted(problems_count.keys(), key = lambda k: k[0])
for tag in d:
    print (tag,problems_count[tag],avg_difficulty[tag],max_difficulty[tag],min_difficulty[tag], sep=',')

我主要分析了每个标签(题目类型)的题目数、平均难度、最高难度、最低难度,结论如下(截止到2018.11.12)

在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值