网站建设维护资质,一个网站只有一个核心关键词,网络运维是做什么的,wordpress 嵌入pythonOmicron变种病毒传染性太强了#xff0c;城市屡屡破防。封闭在家的我决定为防疫做点事#xff1a;帮助筛选密切接触、次密切接触人员。 网格员提供了一些小区的风险时段内的接触记录、确诊人员#xff0c;需要判断人员的风险分类#xff1a;
A类#xff1a;疑似病例、临床…Omicron变种病毒传染性太强了城市屡屡破防。封闭在家的我决定为防疫做点事帮助筛选密切接触、次密切接触人员。 网格员提供了一些小区的风险时段内的接触记录、确诊人员需要判断人员的风险分类
A类疑似病例、临床诊断病例、确诊病例。输入数据B类与A类人员有接触的人员。需要判断C类与B类人员有接触的人员。需要判断D类其他人员。
输入规格
输入的数据有多组处理至EOF为止。每组数据 首行有4项日期D字符串、小区人数N、接触记录数量C、确诊人数P间隔1个空格。N、C、P都是非负整数。之后是C行接触记录。每条记录由两个人员ID组成间隔1个空格。没有重复的接触记录。然后是P行确诊人员ID。为保护隐私发给我的数据中人员ID已经脱敏都是些序号范围从1到N。小区最多2000人。本题不考察时空复杂度。
输出规格
对每组数据 输出日期换行。按照序号由小到大逐行输出A、B、C类人员ID和类别A/B/C字母间隔1个空格。D类略过。
样例输入
2022-04-01 8 5 2
2 1
8 5
5 2
3 4
4 2
1
8
2022-01-01 5 0 0
样例输出
2022-04-01
1 A
2 B
4 C
5 B
8 A
2022-01-01
样例解释
第1组1、8为A类。2、5与A类人员有接触属于密接B类。4与B类人员有接触属于次密接C类。第2组为空。
提示
最多2K人接触记录排除重复后最多2K * 2K ~ 4M条可以用布尔型的二维数组bool contact[N][N];记录当contact[u][v]为true时表示编号u和v的人员有接触。约需要4M字节空间可行。 是否接触其实用1-bit就能表示1-byte能表示8条接触记录所以只需4M / 8 ~ 512KB人员类别可用数组char tag[N]保存全部初始化为D或NUL。 用D更清晰可用memset(s, c, n)设置。用NUL更方便写成char tag[N]{};即可。这两种方式如果不太理解建议都试一遍。样例第一组数据读入后的contact数组状态 为使区分明显用.代表false用T代表true。 读入全部接触记录后先根据A类把B类全标记出来再根据B类从剩余人员中把C类标记出来。 代码实现方法1
#includestdio.h
#includestdlib.h
void test(int);
char date[15];
typedef struct ArcNode* Arc;
struct ArcNode
{int adjvex;Arc next;
};struct Vnode
{Arc bgn;char type;
};
struct Vnode graph[2001];
void init(int N);
void createNode(int v1,int v2);
void sift(int N);
void Print(int N)
{for(int i1;iN;i){if(graph[i].type!D){printf(%d %c\n,i,graph[i].type);}}return;
}
int main()
{int N,C,P;while(scanf(%s %d%d%d,date,N,C,P)!EOF){init(N);for(int i0;iC;i){int v1, v2;scanf(%d%d,v1,v2);createNode(v1,v2);createNode(v2,v1);}for(int i0;iP;i){int v;scanf(%d,v);graph[v].typeA;}sift(N);printf(%s\n,date);//test(1);Print(N);}return 0;
}
void init(int N)
{for(int i1;iN;i){graph[i].bgnNULL;graph[i].typeD;}return;
}
void createNode(int v1,int v2)
{Arc newnode(Arc)malloc(sizeof(struct ArcNode));newnode-adjvexv2;newnode-nextNULL;if(graph[v1].bgnNULL){graph[v1].bgnnewnode;}else{Arc pregraph[v1].bgn;Arc curpre-next;while(cur!NULL){precur;curcur-next;}pre-nextnewnode;}return;
}
void sift(int N)
{for(int i1;iN;i){//寻找B类型if(graph[i].typeA){Arc curgraph[i].bgn;while(cur!NULL){int vcur-adjvex;if(graph[v].typeD)graph[v].typeB;curcur-next;}}}//Print(N);for(int i1;iN;i){if(graph[i].typeB){Arc curgraph[i].bgn;while(cur!NULL){int vcur-adjvex;if(graph[v].typeD)graph[v].typeC;curcur-next;}}}return;
}
void test(int i)
{//调试函数printf(Start to test:\n);Arc curgraph[i].bgn;while(cur!NULL){printf(%d %d\n,i,cur-adjvex);curcur-next;}return;
}