zoukankan      html  css  js  c++  java
  • HDU4451Dressing(计数)

    HDU4451Dressing(计数)

    题目链接

    题目大意:给你N件衣服, M条裤子, K双鞋子,如今有P个不合理的的搭配(衣服和裤子或者裤子和鞋子),要求不用P中不理的搭配方式来将衣服裤子鞋子三件搭配起来有多少种方案。

    解题思路:本来仅仅要给一个不合理的搭配方案的话,那么就是用总的搭配数目减掉2.可是可能会有衣服1 裤子1 ,裤子1 鞋子1这种不合里搭配,那么衣服1 裤子1 鞋子1就多减了一次。由于这里都是由裤子来关联的,那么就将每条裤子不能搭配的衣服和鞋子的数目都记录下来,最后枚举一边裤子,一边累计(N - 和这条裤子不搭的衣服数目) (K - 和这条裤子不搭的鞋子)

    代码:

    #include <cstdio>
    #include <cstring>
    
    const int maxn = 1e3 + 5;
    int vis1[maxn][maxn], vis2[maxn][maxn];
    int c[maxn], s[maxn];
    
    int main () {
    
        int N, M, K, P;
        int a, b;
        char str1[10], str2[10];
        while (scanf ("%d%d%d", &N, &M, &K) && (N || M ||K)) {
    
            memset (vis1, 0, sizeof (vis1));
            memset (vis2, 0, sizeof (vis2));
            memset (c, 0, sizeof (c));
            memset (s, 0, sizeof (s));
    
            scanf ("%d", &P);
            for (int i = 0; i < P; i++) {
                scanf ("%s%d%s%d", str1, &a, str2, &b);
                if (str1[0] == 'c' && str2[0] == 'p') {
    
                    if (!vis1[a][b]) {
                        vis1[a][b] = 1;
                        c[b]++;
                    }
                }
    
                if (str1[0] == 'p' && str2[0] == 's') {
                    if (!vis2[a][b]) {
                        vis2[a][b] = 1;
                        s[a]++;
                    }
                }
            }
    
            int ans = 0;
            for (int i = 1; i <= M; i++)
                ans += (N - c[i]) * (K - s[i]);
            printf ("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Java中的事务
    ABCDE
    Android 防内存泄露handler
    自建应用新花样,菜鸟也会做应用
    软件測试之独步武林系列(一)
    刚在在win8.1下装了ubuntu12.04
    SVN 的一些操作
    [华为机试练习题]42.求二叉树的深度和宽度
    iOS_正則表達式
    在应用中更新App版本号
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4267484.html
Copyright © 2011-2022 走看看