zoukankan      html  css  js  c++  java
  • Codeforces 919C

    传送门:http://codeforces.com/contest/919/problem/C

    给出一张n×m的座位表(有已占座位和空座位),请选择同一行(或列)内连续的k个座位。求选择的方法数。

    Hack:首先,若k=1,则所有的空座位均可选,方法数即为空座位数。

    对于某一行(或列)中连续的len个座位,选择的方法数为len-k+1。

    于是,分别逐行、逐列地统计,求出答案。参考程序如下:

    #include <stdio.h>
    #define MAX_N 2000
    
    char map[MAX_N][MAX_N];
    int row[MAX_N][MAX_N], col[MAX_N][MAX_N];
    
    int main(void)
    {
        int n, m, k;
        scanf("%d%d%d", &n, &m, &k);
        for (int i = 0; i < n; i++) {
            getchar();
            for (int j = 0; j < m; j++)
                map[i][j] = getchar();
        }
        int ans = 0;
        if (k == 1) {
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < m; j++)
                    if (map[i][j] == '.') ans++;
            }
            printf("%d
    ", ans);
            return 0;
        }
        //pass by row
        for (int i = 0; i < n; i++) {
            int len = 0, cnt = 0;
            for (int j = 0; j < m; j++) {
                if (map[i][j] == '*') {
                    if (len) row[i][cnt++] = len;
                    len = 0;
                }
                else len++;
            }
            if (len) row[i][cnt++] = len;
        }
        //pass by column
        for (int j = 0; j < m; j++) {
            int len = 0, cnt = 0;
            for (int i = 0; i < n; i++) {
                if (map[i][j] == '*') {
                    if (len) col[j][cnt++] = len;
                    len = 0;
                }
                else len++;
            }
            if (len) col[j][cnt++] = len;
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; row[i][j] != 0; j++)
                if (row[i][j] >= k) ans += row[i][j] - k + 1;
        }
        for (int i = 0; i < m; i++) {
            for (int j = 0; col[i][j] != 0; j++)
                if (col[i][j] >= k) ans += col[i][j] - k + 1;
        }
        printf("%d
    ", ans);
        return 0;
    }
  • 相关阅读:
    C语言写数据库(三)
    C语言写数据库(一)
    KMP 串的模式匹配 (25 分)
    11-散列4 Hashing
    11-散列3 QQ帐户的申请与登陆 (25 分)
    11-散列1 电话聊天狂人 (25 分)
    11-散列2 Hashing (25 分)
    am335x system upgrade uboot nand boot(三)
    am335x system upgrade uboot ethernet(二)
    am335x system upgrade uboot sd boot(一)
  • 原文地址:https://www.cnblogs.com/siuginhung/p/8401575.html
Copyright © 2011-2022 走看看