https://www.codechef.com/problems/CLEANUP/
在为宴会准备食物的漫长而成功的一天之后,是时候清理了。在厨房关闭之前,有一份工作清单要做。这些作业的索引从1到n。
大多数厨师已经离开,只有厨师和他的助手才能清理干净。值得庆幸的是,一些厨师在他们离开之前处理了一些工作,因此只剩下n个工作的一部分。厨师和他的助手以下列方式分配剩余的工作。厨师以最少的索引完成未完成的工作,助理以第二最少的索引完成未完成的工作,厨师用未完成的工作获得第三个最小索引,等等。即,如果未完成的工作按其增加的顺序列出然后,Chef将从列表中的第一个作业开始,每个其他一个,并且助理将从列表中的第二个作业开始接受每个其他一个。
厨师记录了他们离开之前完成的工作。不幸的是,这些工作没有按任何特定顺序记录。给出一个未排序的列表 完成的工作,你要确定厨师必须完成哪些工作,以及在关闭厨房之前他的助手必须完成哪些工作 晚间。 输入
第一行包含一个整数T≤50,表示要遵循的测试用例数。每个测试用例包含两行。第一行包含两个数字n,m满足0≤m≤n≤1000。这里,n是关闭前必须完成的作业总数,m是已经完成的作业数。第二行包含1和n之间的m个不同整数的列表。这些是已经完成的工作的指数。连续的整数由单个空格分隔。 输出
每个测试用例的输出包含两行。第一行是分配给Chef的作业索引列表。第二行是分配给他的助手的工作索引列表。两个列表必须以索引的递增顺序出现,并且连续的整数应该由单个空格分隔。如果未为Chef或助手分配任何作业,则其对应的行应为空白。 实施例
输入:
3
6 3
2 4 1
3 2
3 2
8 2
3 8
输出:
3 6
5
1
1 4 6
2 5 7
代码:
#include<stdio.h>
int main() {
int t=0,n=0,m=0,i=0,count=0,val=0,j=0;
int arr[100]={0};
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&arr[i]);
}
val=0;
for(i=1;i<=n;i++)
{
count=0;
for(j=0;j<m;j++)
{
if(i==arr[j])
{
count=1;
break;
}
}
if(count==0)
{
val=val+1;
if(val%2!=0)
printf("%d ",i);
}
}
printf("\n");
val=0;
for(i=1;i<=n;i++)
{
count=0;
for(j=0;j<m;j++)
{
if(i==arr[j])
{
count=1;
break;
}
}
if(count==0)
{
val=val+1;
if(val%2==0&&val!=0)
printf("%d ",i);
}
}
printf("\n");
}
return 0;
}
在IDE上正常运行但是给出了 提交时的运行时错误(SIGSEGV)..请帮助
答案 0 :(得分:1)
第一行包含两个数字
n
,m
满足0 ≤ m ≤ n ≤ 1000
这向我表明
int arr[100]={0};
不适用于所有测试用例。将其更改为:
int arr[1000]={0};