【题解】彩色的棋子

题目描述

  小S正趴在地上画画,发现书桌上有一个国际象棋棋盘,上面还放了一些棋子。她想用手中的彩笔给这些棋子都涂上颜色,使得每一行或每一列里没有颜色相同的棋子。

  小S想知道她至少要用几种彩笔呢?

输入格式

  第一行,一个整数N(1≤N≤100),表示国际象棋的棋盘规模是N×N的。

  接下来是一个N×N的字符矩阵,由“×”和“.”两种字符组成。如果矩阵中第i行第j列的字符是“×”,则表示棋盘上第i行第j列的格子中有一个棋子;如果是“.”,则那个格子是空着的。

输出格式

  一个整数M,表示至少要涂M种颜色。

输入样例

2

*.

**

输出样例

2

题解

  容易想到,答案即为棋子数量最多的行或列的棋子数量。

#include <iostream>
#include <algorithm>
#include <cmath>
#define MAXN 101

using namespace std;

int n;
char a[MAXN][MAXN];
int fx[MAXN][MAXN], fy[MAXN][MAXN];
int ans;

int main()
{
    cin >> n;
    for(register int i = 1; i <= n; i++)
    {
        for(register int j = 1; j <= n; j++) 
        {
            cin >> a[i][j];
        }
    }
    for(register int i = 1; i <= n; i++)
    {
        for(register int j = 1; j <= n; j++)
        {
            fx[i][j] = fx[i][j - 1] + (a[i][j] == '*');
            fy[j][i] = fy[j][i - 1] + (a[i][j] == '*');    
            ans = max(ans, max(fx[i][j], fy[j][i]));
        }
    }
    cout << ans;
    return 0;
} 
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10805683.html