2020-09 CCF CSP模拟题(1&2) python3题解

本文记录了使用Python解决两道CCF模拟题的过程,涉及最近点查询和风险人群筛查问题。解题策略包括利用二维列表实现小顶堆效果以及遍历坐标序列计算停留状况。在优化过程中,注意到了变量重置的问题对结果的影响。
摘要由CSDN通过智能技术生成

2020-09 CCF CSP模拟题(1&2) python3题解

最近需要做CCF的模拟题,想着还没用python刷过题,试试看,记录一下解题思路和过程。

2020-09-1 称检测点查询(100)

不知道他标题写的什么鬼,不过题干意思是最近监测点

题设
解题思路还是比较清晰的,输出最近三个点的序号,一开始想就做个小顶堆,再一想一共就三个数排个鬼的堆,数据结构就用个二维列表(没numpy的数组感觉python写起来苦不堪言)新的点进来判断一下,距离够近把后面的pop掉把他insert进对应位置就好了
数据范围如下
在这里插入图片描述
还教我欧氏距离怎么算,属实贴心呢~

n,x,y =  map(int, input().split())
mat = [[0,1500] for i in range(3)]
for case in range(n):
    a,b = map(int, input().split())
    c = ((a-x)**2+(b-y)**2)**0.5
    if c<mat[0][1]:
        mat.pop
        mat.insert(0,[case+1,c])
    elif c<mat[1][1]:
        mat.pop
        mat.insert(1,[case+1,c])
    elif c<mat[2][1]:
        mat.pop
        mat.insert(2,[case+1,c])
for case in range(3):
    print(mat[case][0])

2020-09-2 风险人群筛查(100)

在这里插入图片描述
用的方法比较笨= =懒得想,反正就把坐标序列存进来之后,计算连续停留的点状况,存在就计个经过,够k就记个停留,基本就是最朴素的思路

n,k,t,x1,y1,x2,y2 =  map(int, input().split())
num1=0
num2=0
for case in range(n):
    data = list(map(int, input().split()))
    count=0
    for case1 in range(t):
        if data[case1*2]>=x1 and data[case1*2]<=x2 and data[case1*2+1]>=y1 and data[case1*2+1]<=y2:
            c1=1
            count+=1
            if count>=k:
                c2=1
        else:
            count=0
    if c1==1:
        num1+=1
    if c2==1:
        num2+=1
    c1=0
    c2=0
print(num1)
print(num2)

结果只拿了60,emmmm也就是有俩样例没过,然后就先把写的粗糙的地方改改,然后发现了是c1和c2的重置问题,好吧又粗心了

n,k,t,x1,y1,x2,y2 =  map(int, input().split())
num1=num2=0
c1=c2=False
for case in range(n):
    data = list(map(int, input().split()))
    count=0
    for case1 in range(t):
        if x1<=data[case1*2]<=x2 and y1<=data[case1*2+1]<=y2:
            c1=True
            count+=1
            if count>=k:
                c2=True
        else:
            count=0
    if c1:
        num1+=1
    if c2:
        num2+=1
    c1=c2=False
print(num1)
print(num2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值