您的位置:首页 > 其它

HDU 4451 简单容斥

2013-08-22 09:43 330 查看
给出衣服裤子鞋子的数目n m k

给出不能搭配的组合个数q

再给出q个不能组合的东西,可能有两种形式

clothes x plants y,x衣服和y裤子不能搭配

plants x shoe z ,x裤子和z鞋子不能搭配

求可能组成的搭配个数

根据容斥原理 可能的搭配个数=n*m*k-all (两两不能组合的搭配)+all(三个不能组合的搭配)

#include<stdio.h>
#include<string.h>
int tot[1004][3];
int main(){
int n,m,k,q,x,y,i;
char s1[111],s2[111];
while(scanf("%d %d %d",&n,&m,&k)!=EOF){
if(n==0&&m==0&&k==0)break;
memset(tot,0,sizeof(tot));
scanf("%d",&q);
while(q--){
scanf("%s %d %s %d",&s1,&x,&s2,&y);
if(s1[0]=='c')tot[y][0]++; //不能和y搭配衣服
else tot[x][1]++;          //不能和x搭配的鞋
}
int sum=n*m*k;
for(i=1;i<=m;i++){
sum-=tot[i][0]*k;
sum-=tot[i][1]*n;
sum+=tot[i][0]*tot[i][1];
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: