试题编号: 202209-3

试题名称: 防疫大数据

主要是读懂题意

#include <iostream>
#include <stdio.h>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

// 主要就是处理延迟数据 重复数据等
// 根据所给公式,即是处理当天及其前六天的用户名单
// 对于重复的名单 应当删除

struct data
{
    int day;
    int user;
    int region;
};

vector<data> all_data[1010];   // 所有天的用户信息
map<int, bool> if_danger;      // 是否为风险区
map<int, pair<int, int>> last; // 每个风险区的持续时间
vector<int> ans_all[1010];

int main()
{
    int days = 0;
    scanf("%d", &days); // 天数
    for (int i = 0; i < days; i++)
    {
        int r, m;
        scanf("%d%d", &r, &m);
        for (int j = 0; j < r; j++)
        {
            // 置为风险区
            int temp;
            scanf("%d", &temp);
            // 曾经设为风险区
            if (if_danger[temp] == true)
            {
                // 是否连续
                // 依照提议看
                // 风险区肯定大于零
                if (last[temp].second == i - 1||last[temp].second>=i)//易错点
                {
                    last[temp].second = i + 6;
                }
                else
                {
                    last[temp].first = i;
                    last[temp].second = i + 6;
                }
            }
            else
            {
                if_danger[temp] = true;
                last[temp].first = i;
                last[temp].second = i + 6;
            }
        }

        // 读入用户数据
        for (int j = 0; j < m; j++)
        {
            int d, u, r;
            scanf("%d%d%d", &d, &u, &r);

            all_data[i].push_back({d, u, r});
        }

        // 判断;
        vector<int> ans;
        //判断是否有符合条件的用户,当天以及前六天
        for (int j = 0 > i - 6 ? 0 : i - 6; j <= i; j++)
        {

            for (int k = 0; k < all_data[j].size(); k++)
            {
                if (all_data[j][k].day >= i - 6 && all_data[j][k].day <= i)
                {
                    for (int s = all_data[j][k].day; s <= i; s++)
                    {
                        if (if_danger[all_data[j][k].region]&&s >= last[all_data[j][k].region].first && s <= last[all_data[j][k].region].second)//易错点
                        {
                            if (s == i)
                            {
                                ans.push_back(all_data[j][k].user);
                            }
                        }
                        else
                        {
                            break;
                        }
                    }
                }
            }
        }

        //排序去重
        sort(ans.begin(), ans.end());
        ans.erase(unique(ans.begin(), ans.end()), ans.end());
        for (int i1 = 0; i1 < ans.size(); i1++)
        {
            ans_all[i].push_back(ans[i1]);
        }
    }

    //输出所有
    for (int i = 0; i < days; i++)
    {
        cout << i;
        for (int j = 0; j < ans_all[i].size(); j++)
        {
            cout << " " << ans_all[i][j];
        }
        cout << endl;
    }

    return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐