本文主要是介绍【SSLGZ】试卷,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
思路
状压+组合计数
状压出选择那些试题,然后统计每种试卷的个数,最后两两相乘
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=2077;
int t,n,m,k,a[maxn],b[maxn],c[maxn];
char st[maxn];
int main()
{scanf("%d",&t);while(t--){memset(a,0,sizeof(a));int ans=0;scanf("%d%d%d",&n,&m,&k);for(int i=1; i<=n; i++){scanf("%s",st);for(int j=0; j<m; j++) a[i]=a[i]*2+(st[j]=='A');}int p=1<<m;for(int s=1; s<=p; s++){memset(b,0,sizeof(b)); int cnt=0,ss=0;memset(c,0,sizeof(c));for(int i=1; i<=n; i++){if(!b[a[i]&s]) c[++cnt]=a[i]&s;b[a[i]&s]++;}for(int i=1; i<=cnt-1; i++) for(int j=i+1; j<=cnt; j++) ss+=b[c[i]]*b[c[j]];if(ss>=k) ans++;}printf("%d\n",ans);}
}
这篇关于【SSLGZ】试卷的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!