Codeforces Round #639 (Div. 2)
Codeforces Round #639 (Div. 2)
(这场官方搞事,唉,just solve for fun...)
A找规律
给定n*m个拼图块,每个拼图块三凸一凹,问能不能拼成 n * m的长方形
只要有某一维为1都可,只要无一维为1,只能是 2 * 2
B找规律,二分
搭金字塔
如图:
给定n,每次尽可能搭高的,问能搭几个金字塔
找规律,预处理,查询时二分
C数学,桶
换房子,下面就是换的规则(无非就是新房为k+Ak再对n取模)
模拟一下,桶存即可
D深搜
规则很多很复杂
原题地址:
https://codeforces.ml/contest/1345/problem/D
主要的构造要求
思路:整理一下所有题目背景,发现我们为了满足规则2,不妨先在所有黑格子上放S即可,然后再考虑如何放N,这样很轻易实现规则2
先讲一下针对规则3非法情况
所有的黑格子形成的区域块一定是一个凸块
如果是凹块(包括中空和边缘缺失的情况)一定会破坏规则3
因为数据比较小,所以我们暴力去查是否满足凸块,即一旦一行或者一列出现了黑块,那么这个黑块只能连续,否则肯定非法
再考虑一下规则1如何非法
根据前面的逻辑,我们S只放在黑色块上,那么只要一行或一列全为白,那就破坏了规则1
但真的是这样吗?
这里真的很坑,按照前面的思路,我们只是将所有黑格上放S,不意味着白格不能放S
如果说一行全白并且一列全白,那么他们的交点如果我放S,那么规则1就不会被破坏了
所以这一点一定要注意,否则很多可行解会被遗漏
一旦满足了所有要求,那么我们最少应该放多少S嘞?
显然一个凸块给一个S,让S该凸块纵情遨游即可
所以dfs深搜,记录访问情况即可
AC:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define maxn 1005
#define minn -105
#define ll long long int
#define ull unsigned long long int
#define uint unsigned int
inline int read()
{
int ans=0;
char last=' ',ch=getchar();
while(ch<'0'|ch>'9')last=ch,ch=getchar();
while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();
if(last=='-')ans=-ans;
return ans;
}
char a[maxn][maxn];
bool been[maxn][maxn];
int n,m;
bool ok=0;
void dfs(int x,int y)
{
if(x<1||y<1||x>n||y>m||a[x][y]=='.'||been[x][y])return;
been[x][y]=1;
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
int main()
{
for(int i=0;i<maxn;i++)
for(int j=0;j<maxn;j++)
been[i][j]=0;
n=read(),m=read();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
bool check1=0,check2=0;
int k=0;
for(int i=1;i<=n;i++)
{
if(ok)break;
check2=0;
for(int j=1;j<=m;j++)
{
if(a[i][j]=='.'||ok)continue;
if(check2)ok=1;
check2=1;
while(j<=m&&a[i][j]=='#')j++;
}
if(!check2)check1=1;
}
bool check3=0,check4=0;
for(int i=1;i<=m;i++)
{
if(ok)break;
check4=0;
for(int j=1;j<=n;j++)
{
if(a[j][i]=='.'||ok)continue;
if(check4)ok=1;
check4=1;
while(j<=n&&a[j][i]=='#')j++;
}
if(!check4)check3=1;
}
if(check3!=check1)ok=1;
if(ok)
{
cout<<-1<<endl;
return 0;
}
int ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(ok)break;
if(been[i][j]||a[i][j]=='.')continue;
ans++;
dfs(i,j);
}
cout<<ans<<endl;
return 0;
}
Codeforces Round #639 (Div. 2)的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
随机推荐
- 邮件退信“Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'”
标题是一个近期遇到的NDR 对于Exchange运维工作者,NDR通常给了我们较为清晰的排错方向,我们先看一下退信的原因, 我的一台MailBox报错“远程服务器返回‘420 4.2.0’接受延迟,因 ...
- 【Selenium07篇】python+selenium实现Web自动化:PO模型,PageObject模式!
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第七篇博 ...
- css文本阴影
文本阴影-text-shadow text-shadow 属性向文本添加一个或多个阴影.该属性是逗号分隔的阴影列表,每个阴影有两个或三个长度值和一个可选的颜色值进行规定,省略的长度是 0. h-sha ...
- Spring Boot 集成 Spring Security 入门案例教程
前言 本文作为入门级的DEMO,完全按照官网实例演示: 项目目录结构 Maven 依赖 <parent> <groupId>org.springframework.boot&l ...
- stand up meeting 12-2
今天因为各位组员组里项目原因没有集中在一起进行stand up meeting.但是士杰和天赋国庆分别对项目进度和前后端的结合进行的沟通. 针对后端部分,天赋完成了GetRankingData API ...
- Java数组模拟环形队列
2.环形队列 (上一篇队列:https://www.cnblogs.com/yxm2020/p/12676323.html) 百度百科 1.假溢出 系统作为队列用的存储区还没有满,但队列却发生了溢 ...
- gitbook命令
安装gitbook命令 前提:已经安装nodejs npm install -g gitbook-cli 查看版本号 gitbook -V gitbook命令 gitbook -h Usage: gi ...
- 《Spring In Action》阅读笔记之装配bean
Spring主要装配机制 1.在XML中进行显式配置 2.在Java中进行显式配置 3.隐式的的bean发现机制和自动装配 自动化装配bean Spring从两个角度来实现自动化装配 1.组件扫描:S ...
- cgi、fastCGI、php-fpm、 php-CGI的区别
cgi.fastCGI.php-fpm. php-CGI的区别 作为面试的高频热点问题,必须来一波记录: 我们发送一个请求到收到响应之间的一个过程是什么? 如果客户端请求的是 index.html,那 ...
- Java中的字符串操作(比较String,StringBuiler和StringBuffer)
一.前言 刚开始学习Java时,作为只会C语言的小白,就为其中的字符串操作而感到震撼.相比之下,C语言在字节数组中保存一个结尾的\0去表示字符串,想实现字符串拼接,还需要调用strcpy库函数或者自己 ...