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)