CCF 202009-1 称检测点查询 CCF 202009-2 风险人群筛查

CCF 202009-1 称检测点查询

CCF 202009-1 称检测点查询 CCF 202009-2 风险人群筛查_第1张图片

思路

给定一个点坐标x,y,求距离给定的N个点坐标最近的前三个点的编号,若距离相同则取编号最小的。排序问题,即将N个点和目标点(x,y)所有距离存储后,有小到大进行排序,输出前三个点。

代码实现

#include 
#include 
#include 

using namespace std;

const int N = 201;

int n, X, Y;
//定义目标点
struct Point
{
    int x, y, d;//坐标、和目标点的距离
    int id;//点的编号
    //重载小于号:若距离不同,则距离小的在前。若距离相同则编号小的在前
    bool operator< (const Point& t) const
    {
        if (d != t.d) return d < t.d;
        return id < t.id;
    }
}q[N];//N个坐标点

//计算两点之间距离
int get_dist(int x1, int y1, int x2, int y2)
{
    int dx = x1 - x2;
    int dy = y1 - y2;
    return dx * dx + dy * dy;
}

int main()
{
    cin >> n >> X >> Y;//读入目标点坐标及数量
    for (int i = 0; i < n; i++)
    {
        int x, y;
        cin >> x >> y;
        //初始化点的信息并计算距离目标点的距离,编号从1开始计
        q[i] = { x, y, get_dist(X, Y, x, y), i + 1 };
    }
    sort(q, q + n);//排序
    //输出前三个点的编号
    for (int i = 0; i < 3; i++) cout << q[i].id << endl;
    return 0;
}

CCF 202009-2 风险人群筛查

CCF 202009-1 称检测点查询 CCF 202009-2 风险人群筛查_第2张图片

思路

给定一个矩形区域(高风险区),给定N个人T个时刻经过的位置坐标,统计其中多少人曾经到过高风险区(只出现一次或小于k次),多少人曾经逗留过高风险区(位置坐标连续K个出现在矩形区域内)

代码实现

#include 
#include 
#include 

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;//存储点

int n, k, t, x1, y1, x2, y2;//人数,连续多少个点逗留,每个人的时刻(点数)、矩形左下角和右上角坐标

int main()
{
    cin >> n >> k >> t >> x1 >> y1 >> x2 >> y2;

    int res1 = 0, res2 = 0;//曾经去过和逗留过的人数
    while (n--)
    {
        bool r1 = false, r2 = false;
        int s = 0;
        for (int i = 0; i < t; i++)
        {
            int x, y;
            cin >> x >> y;//读入每个点的坐标
            //判断当前点在不在高危险区域
            if (x >= x1 && x <= x2 && y >= y1 && y <= y2)
            {
                s++;
                r1 = true;
                //若去过的次数大于等于给定的k次数再判定逗留
                if (s >= k) r2 = true;
            }
            else s = 0;
        }
        if (r1) res1++;
        if (r2) res2++;
    }
    cout << res1 << endl << res2 << endl;
    return 0;
}
没有一个冬天不可逾越
没有一个春天不可到来
我们终将战胜疫情!
愿山河无恙,人间皆安!
长安常安!
西安加油!
愿来日可期
仍有秦扫六国之风范
大唐盛世之美艳!
愿我们美丽的十三朝古都西安早日康复!

你可能感兴趣的:(CCF代码每日一练,算法)