最近需要做CCF的模拟题,想着还没用python刷过题,试试看,记录一下解题思路和过程。
不知道他标题写的什么鬼,不过题干意思是最近监测点
解题思路还是比较清晰的,输出最近三个点的序号,一开始想就做个小顶堆,再一想一共就三个数排个鬼的堆,数据结构就用个二维列表(没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])用的方法比较笨= =懒得想,反正就把坐标序列存进来之后,计算连续停留的点状况,存在就计个经过,够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)