首页 > 其他 > 详细

QFNU 10-02 19 training

时间:2020-10-11 18:37:53      阅读:44      评论:0      收藏:0      [点我收藏+]

B - Yet Another Crosses Problem

题意:

输入一个图,判断其中是否存在十字,十字就是有两条垂直的横着或竖着穿过整个图的线,如下:

技术分享图片

 

 这样图的是非十字:

技术分享图片

 

 以‘.‘代替白色方格,以‘*’代替黑色方格,如果有十字直接输出0,如没有,输出需要将几个‘.‘变为‘*‘才能构成至少一个十字。

因为要求出最少要填的色,就找出每行每列的白色格子数,然后算每行每列的加和,最少的那个就是要填的最少数量。

1、将图存入二维char数组,并将每行每列‘.‘出现的次数分别存入数组

2、将各行各列’.‘出现的次数分别相加,找出最小值。要注意这个交点处的字符是不是‘.‘,如果是就相当于多加了一个,要减去1.

#include<bits/stdc++.h>
#define ll long long
#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
int main()
{
    speed_up;
    int t;
    cin>>t;
    while(t--)
    {
        int m,n;
        cin>>m>>n;
        char s[m][n];
        int x[m]={0},y[n]={0};
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                cin>>s[i][j];
                if(s[i][j]==‘.‘)x[i]++;
                if(s[i][j]==‘.‘)y[j]++;
            }
        }
        int minn=x[0]+y[0];
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                int z=x[i]+y[j];
                if(s[i][j]==‘.‘)z--;
                minn=min(minn,z);
            }
        }
        cout<<minn<<endl;
    }
}

QFNU 10-02 19 training

原文:https://www.cnblogs.com/SyrupWRLD999/p/13763965.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!