本文主要是介绍2020百度之星初赛二 Covid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Problem Description
科学家小沃沃在研究病毒传播的规律,从而控制疫情。
有 n 个人,编号分别为 1,2,…,n。我们用荧光粉代替病毒,编号为 1 的人,在第 0 时刻涂上了荧光粉,剩下的人在第 0 时刻没有涂。
对于第 i 个人,我们知道这个人在哪些时刻出现在了哪些地方。
如果时刻 t,某个人和身体上有荧光粉的人,出现在了同一地点,那么从时刻 t 以后,这个人也会沾上荧光粉。
从小到大输出实验结束后身体上有荧光粉的人的编号。
Input
第一行一个整数 T(1≤T≤20) 表示 T 组数据。
对于每组数据,第一行一个整数 n(1≤n≤20000) 表示 n 个人。
对于第 i 个人,第一行输入一个整数 leni 表示这个人的活动轨迹。
接下来 len[i] 行,每行输入两个整数 t,p(1≤t≤100,1≤p≤10) 表示这个人 t 时刻出现在了 p 位置,保证 t 按严格递增的顺序给出。
除了这 len[i] 个时刻,这个人都呆在家里,或者换句话说,他/她不在任何位置。
保证 len[1]+len[2]+…+len[n]≤200000。
Output
对于每组数据输出一行,表示所有患者的编号。按编号从小到大输出。
Sample Input
2
4
2
1 1
2 2
3
2 2
3 3
4 4
1
4 4
1
2 1
3
3
1 1
3 1
6 1
3
4 1
5 1
6 1
1
5 1
Sample Output
1 2 3
1 2
样例解释
Case 1:
第 2 时刻,位置 2,1 与 2 相遇,2 沾上了。
第 4 时刻,位置 4,2 与 3 相遇,3 沾上了。
Source
2020 年百度之星·程序设计大赛 - 初赛二
思路:
这个数据范围。。。不是直接模拟就好了吗。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include <map>
#include <string>using namespace std;
typedef long long ll;typedef long long ll;
const int maxn = 20005;
const int mod = 1e9 + 7;vector<int>G[105][20];
int vis[maxn];void init() {for(int i = 1;i <= 100;i++) {for(int j = 1;j <= 10;j++) {G[i][j].clear();}}memset(vis,0,sizeof(vis));
}int main() {int T;scanf("%d",&T);while(T--) {init();int n;scanf("%d",&n);vis[1] = 1;for(int i = 1;i <= n;i++) {int m;scanf("%d",&m);for(int j = 1;j <= m;j++) {int t,x;scanf("%d%d",&t,&x);G[t][x].push_back(i);}}for(int i = 1;i <= 100;i++) {for(int j = 1;j <= 10;j++) {int flag = 0;for(int k = 0;k < G[i][j].size();k++) {int x = G[i][j][k];if(vis[x]) flag = 1;}if(flag) {for(int k = 0;k < G[i][j].size();k++) {int x = G[i][j][k];vis[x] = 1;}}}}int cnt = 0;for(int i = 1;i <= n;i++) {if(vis[i]) cnt++;}int num = 0;for(int i = 1;i <= n;i++) {if(vis[i]) {printf("%d",i);num++;if(num != cnt) {printf(" ");} else {printf("\n");}}}}return 0;
}
这篇关于2020百度之星初赛二 Covid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!