cf1280B
题意:给出一个n*m的矩阵,矩阵中的元素要么P要么是A
每次可以选择一个的子矩形,然后将矩阵中每一行都变为第一行,或者将矩阵中每一列都变为第一列
要求用最少的次数将矩阵中所有元素都变成A
题解:分类讨论,最多四次操作
#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d\n",x,y)
#define pf(x) printf("%d\n",x)
#define each(x) for(auto it:x) cout<<it<<endl;
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=4e5+5;
const int maxm=2e5+5;
const int inf=1e9;
int n,m;
vector<string> a;
int calc(){
int total=0;
vector<int> row(n,0),col(m,0);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i][j]=='A') {
row[i]++;
col[j]++;
total++;
}
if(total==0) return -1;
if(total==n*m) return 0;
if(row[0]==m || row.back()==m || col[0]==n || col.back()==n) return 1;
if(a[0][0]=='A' || a[0].back()=='A' || a[n-1][0]=='A' || a[n-1].back()=='A') return 2;
if(*max_element(all(row))==m || *max_element(all(col))==n) return 2;
if(row[0] || row.back() || col[0] || col.back()) return 3;
return 4;
}
void solve(){
cin>>n>>m;
a.resize(n);
for(int i=0;i<n;i++)
cin>>a[i];
int re=calc();
if(re==-1) puts("MORTAL");
else cout<<re<<"\n";
}
int main(){
int t;
cin>>t;
while(t--)
solve();
}
cf1280B的更多相关文章
随机推荐
- systemctl中添加mysql服务
由于mysql的版本更新,许多术语有了新含义,所以需要特别指出,mysqld.service 等价于mysqld vim /usr/lib/systemd/system/mysqld.service ...
- CUDA学习(六)之使用共享内存(shared memory)进行归约求和(M个包含N个线程的线程块)
在https://www.cnblogs.com/xiaoxiaoyibu/p/11402607.html中介绍了使用一个包含N个线程的线程块和共享内存进行数组归约求和, 基本思路: 定义M个包含N个 ...
- Hexo+coding实现自动化部署
前言 昨天写了一篇利于云环境写博客,但是让群里大佬们看了下.评论道:"写的不错,但还是觉得这个云环境太繁琐了,没有CI/CD自动化部署方便".于是我便百度查了下,网上文章大部分是通 ...
- Django面试集锦(51-65)
目录 51.Django中filter和exclude的区别? 52.Django中values和values_list的区别? 53.如何使用django orm批量创建数据? 54.Django的 ...
- Java properties文件集
log4j: log4j.rootLogger=info, console, log, error ###Console ### log4j.appender.console = org.apache ...
- GDI+ Hello World
学WTL/MFC,学不会了去看WIN32. 学C/C++,学不会了去看汇编. 使用VS,不明白了去用cl.exe/link.exe 控制台下输出图片的分辨率: #include <windows ...
- 渡一教育公开课重点笔记之html
常用的编码字符集:(charset) 1)gb2312 (国标第2312条)缺点:只能识别简体中文 2)gbk (国标扩展字符集,可识别所有亚裔字符) 3)Unicode (万国码) 4)Utf-8 ...
- False注入,以及SQL注入技巧总结
title: False注入,以及SQL注入技巧总结 date: 2017-04-25 00:23:31 tags: ['SQL注入'] --- 利用False我们可以绕过一些特定的WAF以及一些未来 ...
- Algorithms - Insertion Sort - 插入排序
Insertion Sort - 插入排序 插入排序算法的 '时间复杂度' 是输入规模的二次函数, 深度抽象后表示为, n 的二次方. import time, random F = 0 alist ...
- JVM性能优化系列-(4) 编写高效Java程序
4. 编写高效Java程序 4.1 面向对象 构造器参数太多怎么办? 正常情况下,如果构造器参数过多,可能会考虑重写多个不同参数的构造函数,如下面的例子所示: public class FoodNor ...