参赛选手信息更新问题,acm提交不了
题目B:参赛选手信息更新问题时间限制(普通/Java):2000MS/6000MS 运行内存限制:65536KByte
问题描述
我们知道2013“华为杯”大学生团体歌唱大赛要求每个参赛团体由3名同一年级在校学生选手组成,各位同学踊跃报名,赛事组委会收到大量参赛团体信息,包括每一个团体选手姓名、学号、年级、联系方式等。
因最近流感来袭,大赛组委会根据选手建议,决定将赛事推迟到秋季。该项决定带来的问题是:参赛团体的年级信息需要更新,其中已毕业离校参赛团队的信息需要删除。
我们将问题进行简化,大学一年级至四年级的信息依次用0、1、2、3表示,硕士研究生一年级至三年级的信息依次用4、5、6表示,给定参赛团体的年级信息,请你输出更新后的年级信息。
对于本科或者硕士已毕业选手所在参赛队伍,如果原参赛团队是本科生且没有一个选手继续读本校研究生,则该参赛团队无效,信息删除无需输出;如原参赛团队是本科生且至少一位继续本校读研究生,允许继续参赛,年级信息更新为研一;如原参赛团队是硕士生,则该团队无效,信息删除无需输出。
这里我们规定,参赛团体每位选手都正常升级或毕业。
问题输入
输入包括多个测试用例,首先给出测试用例数N,接着给出N个测试用例。
每一个测试用例包括多行,首先给出参赛团体总数M,本科将毕业且有选手继续读研的参赛团队数c;如果c不等于0,则接下来的1行中分别给出c个本科将要毕业且会有继续读研的参赛团队编号;后续输入m行,每行分别给出参赛团队的编号和年级信息,1≤N≤1000,1≤M≤1000,1≤c≤1000。
问题输出
输出包括多行,对于每个测试用例输出多行,每行依次输出有效的参赛团体编号,更新后的年级信息。
样例输入
2
6 2
2 6
1 0
2 3
3 4
4 3
5 6
6 3
4 0
1 0
程序代码:
#include <stdio.h> int main(int argc, char* argv[]) { int n,m,c,i,j,bh; int a[1000],b[1000]; scanf("%d",&n); while(n--) { scanf("%d%d",&m,&c); if(c) { for(i=1;i<=c;i++) scanf("%d",&a[i]); for(i=1;i<=m;i++) scanf("%d%d",&bh,&b[i]); for(i=1;i<=m;i++) { if(b[i]==3) { b[i]=0; for(j=1;j<=c;j++) if(i==a[j]) {b[i]=4;break;} } else if(b[i]==6) b[i]=0; else b[i]+=1; } } else { for(i=1;i<=m;i++) scanf("%d%d",&bh,&b[i]); for(i=1;i<=m;i++) if(b[i]==3||b[i]==6) b[i]=0; else b[i]+=1; } for(i=1;i<=m;i++) if(b[i]!=0) printf("%d %d\n",i,b[i]); } return 0; }2 0
3 6
3 6
样例输出
1 1
2 4
3 5
6 4
1 1
2 1