Input
本题有多组数据
每组数据的第一行有两个整数N, M (1 <= N,M <= 1000) 分别代表申请的同学总数和算法总数
接下来的N行,每行第一个都是整数C(1 <= C <= 100) 代表这位同学精通C种算法,接着这一行会有C个整数,代表这位同学所精通的算法(算法用一个数字表示)
Output
每组数据输出一行
首先输出一共需要招多少位同学 接着这一行输出所招同学的序号
如果某组数据有多种方案,任意给出一种可行解即可
如果不存在这样的方案,只要输出”NO”
#include
using namespace std;
bool func1(int *a,int *b)
{
for(int i=1;i<=a[0];i++)
{
for(int j=1;j<=b[0];j++)
{
if(a[i]==b[j])
return 0;
}
}
return 1;
}
int main()
{
int m,n;
cin>>n>>m;
if(n
{
cout
return 0;
}
int **a=new int *[n];
int *q=new int[m];
int *cas=new int [n];
int c;
for(int i=0;i
{
cin>>c;
if(c
{
a[i]=new int [1];
a[i][0]=m+1;
continue;
}
a[i]=new int [c+1];
a[i][0]=c;
for(int j=1;j
{
cin>>a[i][j];
}
}
int r=0;cas[0]=0;
for(int i=0;i<n;i++)
{
int sum=1;q[sum-1]=i+1;
int t=m-a[i][0];
for(int j=i+1;j<n;j++)
{
if(a[j][0]<=t)
{
if(func1(a[i],a[j]))
{
t-=a[j][0];
sum+=1;
q[sum-1]=j+1;
continue;
}
}
}
if(t==0)
{
cas[r]=sum;
for(int x=0;x<r||x==0;x++)
{
if(cas[x]==cas[r]&&r!=0)
break;
if(x==r-1||r==0)
{
cout<<cas[r]<<" ";
for(int k=0;k<sum;k++)
{
cout<<q[k]<<" ";
}
cout<<endl;
}
}r++;
}
}
if(cas[0]==0)
cout<<"No."<<endl;
for(int i=0;i<n;i++)
delete [] a[i];
delete []a;
delete [] q;
delete [] cas;
}
我的代码为什么老是wrong answer