【题意简述】:k:已经选择的科目数;m:选择的科目类别;c:可以选择的科目数;r:要求最少选择的科目数量
在输入的k和m下面的一行是选择的科目号。
例如:
3 2 //3是他选择了3科,2表示选择了两个类别 0123 9876 2222 //这是他选择的具体的3科科目的科目号 2 1 8888 2222 //其中2表示在这个类别里共有两科8888和2222,然后最少要选择这两个中的一个 3 2 9876 2222 7654 //这是第二个类别,含义同上。
//208K 500Ms
#include<iostream>
using namespace std;
int k,m,c,r;
int a[100];
int b[100];
int main()
{
	while(1)
	{
		int flag = 0;
		cin>>k;
		if(k == 0) break;
		cin>>m;
		for(int i = 0;i<k;i++)
			cin>>a[i];
		while(m--)
		{
			int count = 0;
			cin>>c>>r;
			for(int i = 0;i<c;i++)
				cin>>b[i];
			for(int i = 0;i<k;i++)
			{
				for(int j = 0;j<c;j++)
				{
					if(a[i] == b[j])
						count++;
				}
			}
			if(count < r)
			{
				flag = 1;
			}
		}
		if(flag)
			cout<<"no"<<endl;
		else
			cout<<"yes"<<endl;
	}
	return 0;
}原文:http://blog.csdn.net/u013749862/article/details/40214395