time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given a picture consisting of n

rows and m columns. Rows are numbered from 1 to n from the top to the bottom, columns are numbered from 1 to m

from the left to the right. Each cell is painted either black or white.

You think that this picture is not interesting enough. You consider a picture to be interesting if there is at least one cross in it. A cross is represented by a pair of numbers x

and y, where 1≤x≤n and 1≤y≤m, such that all cells in row x and all cells in column y

are painted black.

For examples, each of these pictures contain crosses:

The fourth picture contains 4 crosses: at (1,3)

, (1,5), (3,3) and (3,5)

.

Following images don't contain crosses:

You have a brush and a can of black paint, so you can make this picture interesting. Each minute you may choose a white cell and paint it black.

What is the minimum number of minutes you have to spend so the resulting picture contains at least one cross?

You are also asked to answer multiple independent queries.

Input

The first line contains an integer q

(1≤q≤5⋅104

) — the number of queries.

The first line of each query contains two integers n

and m (1≤n,m≤5⋅104, n⋅m≤4⋅105

) — the number of rows and the number of columns in the picture.

Each of the next n

lines contains m

characters — '.' if the cell is painted white and '*' if the cell is painted black.

It is guaranteed that ∑n≤5⋅104

and ∑n⋅m≤4⋅105

.

Output

Print q

lines, the i-th line should contain a single integer — the answer to the i

-th query, which is the minimum number of minutes you have to spend so the resulting picture contains at least one cross.

Example
Input

Copy
9
5 5
..*..
..*..
*****
..*..
..*..
3 4
****
.*..
.*..
4 3
***
*..
*..
*..
5 5
*****
*.*.*
*****
..*.*
..***
1 4
****
5 5
.....
..*..
.***.
..*..
.....
5 3
...
.*.
.*.
***
.*.
3 3
.*.
*.*
.*.
4 4
*.**
....
*.**
*.**
Output

Copy
0
0
0
0
0
4
1
1
2
Note

The example contains all the pictures from above in the same order.

The first 5 pictures already contain a cross, thus you don't have to paint anything.

You can paint (1,3)

, (3,1), (5,3) and (3,5) on the 6-th picture to get a cross in (3,3). That'll take you 4

minutes.

You can paint (1,2)

on the 7-th picture to get a cross in (4,2)

.

You can paint (2,2)

on the 8-th picture to get a cross in (2,2). You can, for example, paint (1,3), (3,1) and (3,3) to get a cross in (3,3) but that will take you 3 minutes instead of 1

.

There are 9 possible crosses you can get in minimum time on the 9

-th picture. One of them is in (1,1): paint (1,2) and (2,1).

题意:找补充次数最少的十字架

题解:暴力模拟,分别把每行每列的  *  个数存进数组,找出含有最长 * 的行列以及行列所在坐标i,j,还要判断a[i][j]是否为 .(特判),是的话次数还要减一

#include<iostream>
#include<math.h>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
vector<int>a[];
int xx[],yy[];
char s;
int main()
{
int t, n, m;
cin >> t;
while (t--)
{
int x = -, y = -, cnt = ,x_pos,y_pos;
cin >> n >> m;
for (int i = ; i < n; i++)
{
for (int j = ; j < m; j++)
{
cin >> s;
if (s == '.')
a[i].push_back();
else
a[i].push_back();
}
}
for (int i = ; i < n; i++)
{
cnt = ;
for (int j = ; j < m; j++)
{
cnt = cnt + a[i][j];
}
xx[i]=cnt;
if(cnt>x)
x=cnt;
}
for (int i = ; i < m; i++)
{
cnt = ;
for (int j = ; j < n; j++)
{
cnt = cnt + a[j][i];
}
yy[i]=cnt;
if(cnt>y)
y = cnt; }
int ans=,p=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(xx[i]==x&&yy[j]==y&&a[i][j]==)
p=;
ans=min(m+n-xx[i]-yy[j],ans);
}
}
cout<<ans-p<<endl; for (int i = ; i < n; i++)//清空
a[i].clear();
}
// system("pause");
return ;
}

B. Yet Another Crosses Problem的更多相关文章

  1. Codeforces - 1194B - Yet Another Crosses Problem - 水题

    https://codeforc.es/contest/1194/problem/B 好像也没什么思维,就是一个水题,不过蛮有趣的.意思是找缺黑色最少的行列十字.用O(n)的空间预处理掉一维,然后用O ...

  2. Codeforces 1194B. Yet Another Crosses Problem

    传送门 直接枚举填满哪一行,然后看看这一行填满以后哪一列最小 这个预处理一下 $cnt[i]$ 表示初始时第 $i$ 列有几个位置填满就可以做到 $O(m)$ 对于所有情况取个 $min$ 就是答案, ...

  3. Educational Codeforces Round 68 Editorial

    题目链接:http://codeforces.com/contest/1194                                            A.Remove a Progre ...

  4. Educational Codeforces Round 68

    目录 Contest Info Solutions A.Remove a Progression B.Yet Another Crosses Problem C.From S To T D.1-2-K ...

  5. Educational Codeforces Round 68 (Rated for Div. 2)补题

    A. Remove a Progression 签到题,易知删去的为奇数,剩下的是正偶数数列. #include<iostream> using namespace std; int T; ...

  6. QFNU 10-02 19 training

    B - Yet Another Crosses Problem 题意:找如果使图中某一行某一列全部变成黑色,至少需要把多少个白方格变成黑方格 思路:直接找就可以,注意存储的时候要记得进行分开存储,存储 ...

  7. HDU 4978 A simple probability problem

    A simple probability problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  8. Problem O

    Problem Description Before bridges were common, ferries were used to transport cars across rivers. R ...

  9. Codeforces Round #425 (Div. 2) Problem A Sasha and Sticks (Codeforces 832A)

    It's one more school day now. Sasha doesn't like classes and is always bored at them. So, each day h ...

随机推荐

  1. 使用restTemplate发送post请求,传入参数是在requestBody请求体中,以json形式传输

    @PostMapping public ResponseResult add(User user){ HttpHeaders httpHeaders = new HttpHeaders(); Medi ...

  2. treap(堆树)

    # 2018-09-27 17:35:58 我实现的这个treap不能算是堆.有问题 最近对堆这种结构有点感兴趣,然后想用指针的方式实现一个堆而不是利用数组这种结构,于是自己想到了一个用二叉树结构实现 ...

  3. Linux下安装Docker,报错docker: unrecognized service的两种解决方案

    转自(方法1):https://www.cnblogs.com/ECJTUACM-873284962/p/9362840.html

  4. Python 面试问答基础篇

    1.       Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一.对象的引用计数机制 Python内部使用引用计数,来保持追踪内存中的对 ...

  5. C语言for循环嵌套示例

    打印九九乘法表 #include <stdio.h> int main() {   int n,i,j; for (i=1;i<=9;i++) printf("%-4d&q ...

  6. Py西游攻关之基础数据类型(二)-列表

    Py西游攻关之基础数据类型 - Yuan先生 https://www.cnblogs.com/yuanchenqi/articles/5782764.html  五 List(列表) OK,现在我们知 ...

  7. 140、Java内部类之实例化内部类对象

    01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; class ...

  8. Spark 写 Hive table 非常慢【解决】

    代码如下: dataFrame.createOrReplaceTempView("view_page_utm") val sql = s""" |in ...

  9. 搜索控制器UISearchController的使用

    说明:本文主要是将系统UISearchController控件声明文件中的属性.方法.代理等介绍下,后续再联合[搜索栏UISearchBar]这篇文章一起更新更实用的信息. 1.初始化 // 如果设置 ...

  10. iOS开发的调试技巧

    关于本文: 1.模拟器的快捷键 2.覆盖安装注意事项 3.给模拟器相册增加照片 4.模拟器中程序的数据 5.安装旧版本的模拟器 6.模拟慢网速 7.异常断点与符号断点 1.模拟器的快捷键 常用的模拟器 ...