南邮 OJ 1982 参赛选手信息更新问题II

参赛选手信息更新问题II

时间限制(普通/Java) :  2000 MS/ 6000 MS          运行内存限制 : 65536 KByte
总提交 : 493            测试通过 : 80 

比赛描述

根据题目A的问题描述*,我们知道2013“华为杯”南京邮电大学大学生团体歌唱大赛要求每个参赛团体由3名同一年级在校学生选手组成,各位同学踊跃报名,赛事组委会收到大量参赛团体信息,包括每一个团体选手姓名、学号、年级、联系方式等。因最近流感来袭,大赛组委会根据选手建议,决定将赛事推迟到秋季。该项决定带来的问题是:参赛团体的年级信息需要更新,其中本科或硕士毕业参赛选手所在团队的信息需要做额外处理。

我们将问题进行简化,从1开始按递增顺序给每一个参赛团体分配一个整数编号,大学一年级至四年级的信息依次用0、1、2、3表示,硕士研究生一年级至三年级的信息依次用4、5、6表示,给定参赛团体的年级信息,请你输出更新后的年级信息。

对于本科或硕士已毕业选手所在参赛团队,如果原参赛团体是本科生且没有一个选手在南邮继续读研究生,则该参赛团体无效,其年级信息要删除而无需输出;如果原参赛团体是本科生且至少有一个选手继续在南邮读研究生,允许这些在校选手继续参赛(允许团队少于3人),年级信息更新为硕士研究生一年级;如果原参赛团体是硕士生,则该参赛团体无效,其年级信息要删除而无需输出。这里我们规定,参赛团体每位选手都正常升级或毕业。



输入

输入包括多个测试用例,首先给出测试用例数N,接着给出N个测试用例。

每一个测试用例包括多行,首先第1行分别给出参赛团体总数M、本科将毕业且有选手继续读研的参赛团队数C;如果C0,则在接下来的1行中分别给出C个本科将毕业且会有选手继续读研的参赛团队编号;后续输入M行,每行分别给出参赛团体的编号和年级信息。

这里,1≤N≤1000,1≤M≤1000,1≤C≤1000。

输出

对于每个测试用例,输出多行,每1行依次输出有效的参赛团体编号、更新后的年级信息。

样例输入

2
6 2
2 6
1 0
2 3
3 4
4 3
5 6
6 3
4 0
1 0
2 0
3 6
4 6

样例输出

1 1
2 4
3 5
6 4
1 1
2 1

提示

*南邮2013年《ACM程序设计基础》课程实验赛(二)题目A

题目来源

SED





/* Wrong Answer at Test 1
#include<iostream>

#define MAX_N 1001
bool b[MAX_N];

int main(){
//	freopen("test.txt","r",stdin);
	int t,n,c,i,temp;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&c);
		while(c--){
//			getchar();
//			i = getchar()-'0';
			scanf("%d",&i);
			b[i] = 1;
		}
		for(i=1;i<=n;i++){
			getchar();
			getchar();
			getchar();
			temp = getchar()-'0'+1;
//			printf("%d\n",a[i]);
			if(b[i]){
				b[i] = 0;
				if(temp==4){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",i,temp);
				}
			}else{
				if(temp!=4 && temp!=7){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",i,temp);
				}
			}
		}
	}
}
*/


/* 718MS
#include<iostream>

#define MAX_N 1001
int id[MAX_N];
bool b[MAX_N];

int main(){
//	freopen("test.txt","r",stdin);
	int t,n,c,i,temp;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&c);
		while(c--){
//			getchar();
//			i = getchar()-'0';
			scanf("%d",&i);
			b[i] = 1;
		}
		for(i=1;i<=n;i++){
//			getchar();
//			getchar();
//			getchar();
//			temp = getchar()-'0'+1;
			scanf("%d%d",id+i,&temp);
			temp++;
//			printf("%d\n",a[i]);
			if(b[i]){
				b[i] = 0;
				if(temp==4){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",i,temp);
				}
			}else{
				if(temp!=4 && temp!=7){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",id[i],temp);
				}
			}
		}
	}
}
*/

// 317MS
#include<iostream>

#define MAX_N 1001
int id[MAX_N];
bool b[MAX_N];

int main(){
//	freopen("test.txt","r",stdin);
	int t,n,c,i,temp;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&c);
		while(c--){
			while((temp=getchar())<'0' || temp>'9');
			i = temp-'0';
			while((temp=getchar())>='0' && temp<='9'){
				i = i*10+temp-'0';
			}
//			scanf("%d",&i);
			b[i] = 1;
		}
		for(i=1;i<=n;i++){
			while((temp=getchar())<'0' || temp>'9');
			id[i] = temp-'0';
			while((temp=getchar())>='0' && temp<='9'){
				id[i] = id[i]*10+temp-'0';
			}
			temp = getchar()-'0'+1;
//			scanf("%d%d",id+i,&temp);
			if(b[i]){
				b[i] = 0;
				if(temp==4){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",i,temp);
				}
			}else{
				if(temp!=4 && temp!=7){
//					putchar(i+'0');
//					putchar(' ');
//					putchar(temp+'0');
//					putchar('\n');
					printf("%d %d\n",id[i],temp);
				}
			}
		}
	}
}


你可能感兴趣的:(ACM,南邮OJ,信息更新)