精华内容
下载资源
问答
  • csp试题1:称检测点查询

    千次阅读 2020-09-28 10:06:24
    csp试题1:称检测点查询题目分析代码总结 题目 题目背景       2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类...

    csp试题1:称检测点查询

    题目

    题目背景
          2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”,其他人群“愿检尽检”。
    问题描述
          某市设有 n 个核酸检测点,编号从 1 到 n,其中 i 号检测点的位置可以表示为一个平面整数坐标 (xi, yi)。
          为方便预约核酸检测,请根据市民所在位置 ,查询距其最近的三个检测点。
          多个检测点距离相同时,编号较小的视为更近。
    输入格式
          输入共 n+1 行。
          第一行包含用空格分隔的三个整数 n、X 和 Y,表示检测点总数和市民所在位置。
          第二行到第 n+1 行依次输入 n 个检测点的坐标。第 i+1 行(1 <= i <= n)包含用空格分隔的两个整数 xi 和 yi,表示 i 号检测点所在位置。
    输出格式
          输出共三行,按距离从近到远,依次输出距离该市民最近的三个检测点编号。
    样例1
    输入

    3 2 2
    2 2
    2 3
    2 4
    

    输出

    1
    2
    3
    

    样例2
    输入

    5 0 1
    -1 0
    0 0
    1 0
    0 2
    -1 2
    

    输出

    2
    4
    1
    

    解释
    p1
    评测用例规模与约定
          全部的测试点满足:3<= n <= 200,所有坐标均为整数且绝对值不超过 1000。
    提示
          市民到第 i 号检测点的距离 Di ,可由如下公式算出:
    p2

    分析

          本问题属于在一堆数据中找最大的或最小的前 n 个值,最直接的方法就是维护 n 个变量来保存这最大的或最小的前 n 个值,在不断的循环查找中不断更新这 n 个变量的值。
          本问题在程序中维护了 2n 个变量,有 n 个变量保存索引,另外 n 个变量保存索引对应的值。
          同时需要注意的是,如何处理:多个检测点距离相同时,编号较小的视为更近。在比较时只使用小于号就可以了。

    代码

    import java.util.Scanner;
    
    /**
     * 2020/9/28 csp试题1: 称检测点查询
     * @author dxt
     *
     */
    public class Main {
    	public static void main(String[] args) {
    		//1. 接收数据
    		Scanner scan = new Scanner(System.in);
    		int n = -1;	//检测点总数,3<=n<=200
    		int X, Y;	//该居民的位置坐标,坐标为整数
    		n = scan.nextInt();
    		X = scan.nextInt();
    		Y = scan.nextInt();
    		//2. 查找距离最近的三个检测点的位置
    		//2.1  先初始化三个int值,用于保存距离最小的三个检测点的编号
    		int indexOfMin1 = Integer.MAX_VALUE;	//距离最小的点的编号
    		int minDistance1 = Integer.MAX_VALUE;	//最小的距离
    		int indexOfMin2 = Integer.MAX_VALUE;	//距离第二小的点的编号
    		int minDistance2 = Integer.MAX_VALUE;	//第二小的距离
    		int indexOfMin3 = Integer.MAX_VALUE;	//距离第三小的点的编号
    		int minDistance3 = Integer.MAX_VALUE;	//第三小的距离
    		//2.2 循环接受检测点的距离,并计算其与居民间的距离,并判断其是否最小
    		int x, y;	//用于存储每个检测点的位置
    		for(int i=1; i<=n; i++) {	//注意:编号从1开始
    			//接收第i个捡测点的位置,坐标为整数
    			x = scan.nextInt();
    			y = scan.nextInt();
    			//计算距离
    			int distance = (X-x)*(X-x) + (Y-y)*(Y-y);	//用距离的平方假装距离,不会影响比较
    			//判断是否为最近的点
    			if(distance < minDistance1) {
    				//距离小于最近的点,需要先第三小的点的信息
    				minDistance3 = minDistance2;
    				indexOfMin3 = indexOfMin2;
    				//再更新距离第二小的点的信息
    				minDistance2 = minDistance1;
    				indexOfMin2 = indexOfMin1;
    				//最后更新距离最小的点的信息
    				minDistance1 = distance;
    				indexOfMin1 = i;
    			}else if(distance < minDistance2) {
    				//此时 minDistance1 <= distance < minDistance2
    				//距离小于第二小的点,需要先第三小的点的信息
    				minDistance3 = minDistance2;
    				indexOfMin3 = indexOfMin2;
    				//再更新第二小的点的信息
    				minDistance2 = distance;
    				indexOfMin2 = i;
    			}else if(distance < minDistance3){
    				//此时 minDistance2 <= distance < minDistance3
    				//只需要更新距离第3小的点的信息即可
    				minDistance3 = distance;
    				indexOfMin3 = i;
    			}
    			//如果distance >= minDistance3,则不作处理
    		}
    		//3. 输出结果
    		System.out.println(indexOfMin1);
    		System.out.println(indexOfMin2);
    		System.out.println(indexOfMin3);
    	}
    }
    

    总结

          只使用了单层循环,不是太难。

    展开全文
  • 称检测点查询

    2021-03-17 11:33:27
    称检测点查询 from CCF-CSP 2020-09-1 Time limit:1s Memory limit:256MB 这个题目就是简单的STL应用了,我们可以把每个检测点的编号和距离存储到一个pair里面,然后对所有检测点进行编号,最后输出前三个...

    称检测点查询


    from CCF-CSP 2020-09-1
    Time limit:1s
    Memory limit:256MB

    在这里插入图片描述
    在这里插入图片描述


    这个题目就是简单的STL应用了,我们可以把每个检测点的编号和距离存储到一个pair里面,然后对所有检测点进行编号,最后输出前三个检测点的编号就可以了。对于距离,最好是不开方,因为开方可能遇到小数就会有误差,所有直接存储距离的平方比较好。
    也可以用优先队列。

    ac代码:
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,x,y;
    pair<int ,int> pii[205];                    //存储某个检测点的编号和距离的平方
    bool cmp(pair<int,int> a,pair<int,int> b){  //排序规则,如果距离相等则比较编号
        if(a.second == b.second)
            return a.first < b.first;
        return a.second < b.second;
    }
    int main(){
        cin>>n>>x>>y;
        for(int i = 1;i <= n;++i){              //输入检测点信息
            int a,b;cin>>a>>b;
            pii[i].first = i;pii[i].second = (a - x) * (a - x) + (b - y) * (b - y);
        }
        sort(pii + 1,pii + 1 + n,cmp);//排序
        for(int i = 1;i <= 3;++i)               //输出前三个检测点
            cout<<pii[i].first<<"\n";
        return 0;
    }
    

    优先队列方法

    展开全文
  • CSP-称检测点查询

    2020-11-18 15:33:44
    CSP-称检测点查询题目题解 时隔三个月再发博客!之前事务比较多,也在坚持做题但没时间发博客。 (PS:CSP报名费涨价了。。。) 题目 题解 #include<bits/stdc++.h> using namespace std; int n; int x, y;...

    CSP-称检测点查询


    时隔三个月再发博客!之前事务比较多,也在坚持做题但没时间发博客。
    (PS:CSP报名费涨价了。。。)

    题目

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    题解

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int x, y;
    pair<int, int> dis[200];
    //按照距离从小到大排序 
    bool cmp(pair<int, int> a, pair<int, int> b){
    	if(a.second < b.second)
    		return true;
    	//距离一样按照id排序,不然只能过60% 
    	else if(a.second == b.second)
    		return a.first < b.first;
    	else
    		return false;
    }
    int main(){
    	cin>>n>>x>>y;
    	for(int i=0;i<n;i++){
    		int a, b;
    		cin>>a>>b;
    		//id号从1开始,下标从0开始 
    		dis[i].first = i + 1;
    		dis[i].second = (a-x) * (a-x) + (b-y) * (b-y);
    	}
    	sort(dis, dis+n, cmp);
    	for(int i=0;i<3;i++){
    		cout<<dis[i].first;
    		if(i!=2)	cout<<endl;
    	}
    	return 0;
    }
    
    展开全文
  • **CCF认证考试——称检测点查询**前言一、题目1.题目背景2.问题描述3.输入格式4.输出格式5.样例二、解题思路三、示例代码四、总结 前言 基于python的解题思路于代码实现,新手入门,可能写得不好,欢迎留言交流学习 ...

    前言

    基于python的解题思路于代码实现,新手入门,可能写得不好,欢迎留言交流学习


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、题目

    1.题目背景

    2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”,其他人群“愿检尽检”。

    2.问题描述

    某市设有n个核酸检测点,编号从1到n ,其中i号检测点的位置可以表示为一个平面整数坐标(x, y) 。为方便预约核酸检测,请根据市民所在位置(X, Y) ,查询距其最近的三个检测点。多个检测点距离相同时,编号较小的视为更近。

    3.输入格式

    输入共n+1行。 第一行包含用空格分隔的三个整数 n、X 和Y,表示检测点总数和市民所在位置。 第二行到第 n+1行依次输入 n个检测点的坐标。第i+1行(1<=i<=n)包含用空格分隔的两个整数 xi和yi,表示 i 号检测点所在位置。

    4.输出格式

    输出共三行,按距离从近到远,依次输出距离该市民最近的三个检测点编号。

    5.样例

    在这里插入图片描述

    二、解题思路

    这个题最简单的做法就是,计算n个检测点与市民位置的距离d,然后对这些距离进行排序后再输出距离最小的三个检测点的序号,这个序号就是输入的时候所对应的先后顺序。所以,归根结底是要解决以下三个问题:
    1、计算点与点之间的距离
    2、对距离进行排序
    3、输出点的序号
    在想清楚这几个问题后,我对于距离的排序进行了细微的优化。我的做法是,建立一个列表distance,计算前三个点和市民的距离d1,d2,d3,对它们进行排序后送入列表中,距离小的在列表的尾部。再依次计算往后读入的检测点与市民的距离di,当di大于或者等于distance[0]时,跳过,继续读入下一个检测点位置;当di小于distance[0]时,再比较di与distance内数据的大小,然后再排序。

    三、示例代码

    代码如下(示例):

    if __name__ == '__main__':
        n, x, y = input().split(' ')
        num_zuobiao = int(n)
        ren_zuobiao = [int(x),int(y)]
        l2 = []
        for i in range(0,num_zuobiao):
            l =[]
            X,Y = input().split(' ')
            l.append(int(X))
            l.append(int(Y))
            l2.append(l)
        num =[]
        distance = []
        for i in range(0,num_zuobiao):
            index = len(distance)
            d = pow((pow((ren_zuobiao[0] - l2[i][0]), 2) + pow((ren_zuobiao[1] - l2[i][1]), 2)), 0.5)
            if index == 0:
                distance.append(d)
                num.append(i+1)
                continue
            if index == 1:
                if d < distance[index - 1]:
                    distance.append(d)
                    num.append(i + 1)
                else:
                    distance.append(0)
                    distance[1] = distance[0]
                    distance[0] = distance[1]
                    num.append(0)
                    num[1] = num[0]
                    num[0] = i + 1
                continue
            if index == 2:
                distance.append(0)
                a = distance[0]
                num.append(0)
                if d < a:
                    if d < distance[1]:
                        distance[2] = d
                        num[2] = i+1
                    else:
                        distance[2] = distance[1]
                        distance[1] = d
                        num[2] = num[1]
                        num[1] = i+1
                else:
                    distance[2] = distance[1]
                    distance[1] = distance[0]
                    distance[0] = d
                    num[2] = num[1]
                    num[1] = num[0]
                    num[0] = i + 1
                continue
            else:
                if d >= distance[0]:
                    continue
                elif d <distance[0]:
                    if d < distance[1]:
                        if d < distance[2]:
                            distance[0]=distance[1]
                            distance[1]=distance[2]
                            distance[2]=d
                            num[0] = num[1]
                            num[1] = num[2]
                            num[2] = i+1
                            continue
                        else:
                            distance[0]=distance[1]
                            distance[1]=d
                            num[0] = num[1]
                            num[1] = i+1
                            continue
                    else:
                        distance[0]=d
                        num[0] = i+1
                        continue
        for i in [2,1,0]:
            print(num[i])
    

    四、总结

    其实对于第一题和第二题来说,也不用考虑优化的问题。我就是不想直接用python里的sort函数来进行排序。哈哈哈哈哈哈哈哈哈

    展开全文
  • csp-称检测点查询

    2020-12-09 20:34:12
    为方便预约核酸检测,请根据市民所在位置 (X,Y),查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共 n+1 行。 第一行包含用空格分隔的三个整数 n、X 和 Y,表
  • 202009-1称检测点查询

    2020-12-13 10:57:18
    试题名称: 称检测点查询 时间限制: 1.0s 内存限制: 256.0MB 样例输入1 3 2 2 2 2 2 3 2 4 样例输出1 1 2 3 样例输入2 5 0 1 -1 0 0 0 1 0 0 2 -1 2 样例输出2 2 4 1 样例2解释 AC 以前我做了好几次,都...
  • CSP202009-1 称检测点查询(100分)【数学】

    千次阅读 多人点赞 2020-12-06 21:54:49
    试题名称: 称检测点查询 时间限制: 1.0s 内存限制: 256.0MB 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”...
  • # 存放每个检测点到人的距离 distance = [] # 存放结果集 result = [] for i in range(n): x,y = map(int,input().split()) # 计算的是距离的平方 d = (x-X)**2 + (y-Y)**2 distance.append(d) for i in range(3...
  • CCF——称检测点查询

    2020-10-20 20:36:07
    为方便预约核酸检测,请根据市民所在位置 ,查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共 行。 第一行包含用空格分隔的三个整数 、 和 ,表示检测点总数和市民所在位置...
  • ccf-csp计算机软件能力认证202009-1称检测点查询(C语言版) 题目内容: 题目背景  2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群...
  • 为方便预约核酸检测,请根据市民所在位置(X,Y),查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共n+1行。 第一行包含用空格分隔的三个整数n、X 和Y,表示检测点总数
  • CCF认证-20200901-称检测点查询

    千次阅读 2020-10-12 14:09:44
    CCF认证考试题解目录
  • CSP试题—— 称检测点查询 2020.10.07 By ljm 题目名称: 称检测点查询 题目背景: 2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群...
  • 为方便预约核酸检测,请根据市民所在位置(X,Y),查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共 n+1行。 第一行包含用空格分隔的三个整数 n,X 和Y表示检测点总数和市民...
  • 目录题目代码测试结果 题目 样例1输入 3 2 2 2 2 2 3 2 4 样例1输出 1 2 3 样例2输入 5 0 1 -1 0 0 0 1 0 0 2 -1 2 样例2输出 2 4 1 代码 #include <stdio.h> int main() { long n,i;...w
  • csp认证中,称检测点查询的python实现 基本思想: 原本求出的距离就是按输入的顺序存到列表中,利用字典,字典的键是坐标的顺序,字典的值是距离,对字典的值进行排序,按照排序好的键输出对应的值存到新的列表中,...
  • CCF 202009-1称检测点查询 (100分) #include<stdio.h> #include<math.h> int main(void){ int n; int x,y; scanf("%d %d %d",&n,&x,&y); int a[201][2]={0}; int i,j; for(i=0;i<n;i++...
  • #include <cstdio> #include <algorithm> using namespace std; struct Station{ int x; int y; int dis; int num; }; bool cmp(Station s1, Station s2){ if(s1.dis != s2.dis) return s1......
  • 2020-9-1称检测点查询

    2020-09-28 17:02:45
    为方便预约核酸检测,请根据市民所在位置 ,查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共 行。 第一行包含用空格分隔的三个整数 、 和 ,表示检测点总数和市民所在位置...
  • 称检测点查询 问题描述 试题编号: 202009-1 试题名称: 称检测点查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施...
  • 称检测点查询 时间限制: 1.0s 内存限制: 256.0MB 题目背景  2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”...
  • 题目背景 ...为方便预约核酸检测,请根据市民所在位置(X,Y),查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共n+1行。 第一行包含用空格分隔的三个整数n、...
  • 关键词:称检测点查询 先上代码为敬,题目在后面 编译环境:Dev C++ 5.11 #include <stdio.h> #include <math.h> //距离计算公式 double D(double a, double b, double m, double n) { double D; ...
  • CSP 202009-1 称检测点查询
  • 为方便预约核酸检测,请根据市民所在位置 ,查询距其最近的三个检测点。 多个检测点距离相同时,编号较小的视为更近。 输入格式 输入共n+1行。 第一行包含用空格分隔的三个整数 n、X和Y,表示检测点总数和市民所在...
  • ccf之称检测点查询

    2020-11-07 17:01:09
    ccf202009-1 称检测点查询 if __name__ == "__main__": s = list(map(int,input().split())) n = s[0] x = s[1] y = s[2] result = {} for i in range(1,n+1): cur = list(map(int,input().split())) x_...
  • 称检测点查询 题目 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群“应检尽检”,其他人群“愿检尽检”。问题描述 某市设...
  • 试题名称: 称检测点查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 题目背景 2020 年 6 月 8 日,国务院联防联控机制发布《关于加快推进新冠病毒核酸检测的实施意见》,提出对“密切接触者”等八类重点人群...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,693
精华内容 19,877
关键字:

称检测点查询