【题意简述】: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; }