防疫大数据 CSP CCF
防疫大数据
·
试题编号: 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;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)