栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

CSP 202203-2 出行计算 python 差分算法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CSP 202203-2 出行计算 python 差分算法

CSP 202203-2 出行计算 python 差分算法 题目描述


思路

这道题实际上是利用差分进行计算,也就是进行区间修改

我们可以大概找一下思路,首先我们的数据来说,我们能够正常进行计划的做核酸的时间是
q + k ≤ t ≤ q + k + c − 1 q +k le t leq q+k+c-1 q+k≤t≤q+k+c−1
我们可以看到,只要满足这个条件,我们就可以完成我们计划,所以我们需要对这个区间的值都进行+1的操作,对于差分数组来说,我们就只需要对两端进行操作,也就是 t [ l ] + = 1 , t [ r + 1 ] − = 1 t[l]+=1,t[r+1]-=1 t[l]+=1,t[r+1]−=1

我们还可以对这个公式进行一个转化
t − k − c + 1 ≤ q ≤ t − k t-k-c+1 le q le t - k t−k−c+1≤q≤t−k
所以我们只需要得到我们的q在这个 [ t − l − c + 1 , t − k ] [t-l-c+1,t-k] [t−l−c+1,t−k]上的值,就是我们的计划的数。

之后对差分数组求和,就可以得到计划的数,计算这里面的值,最后的 d i f f [ q ] diff[q] diff[q]就是我们的结果。

代码
# http://118.190.20.162/view.page?gpid=T142

n,m,k = map(int,input().split())

N = 200010
diff = [0]*N 
for i in range(n):
    t,c = map(int,input().split())
    # 在【l, r】时间段内做核酸,则t时刻可进入
    l = max(t-k-c+1,0)
    r = max(t-k,0)
    # 在【l, r】时间段内能出行的计划个数加一
    diff[l] += 1
    diff[r+1] -= 1
# 利用差分计算每个时间的能出行个数
for i in range(1,N):
    diff[i] += diff[i-1]
for j in range(m):
    q = int(input())
    res = diff[q]
    print(res)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/938749.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号