Codeforces 1345 D - Monopole Magnets
这一场也是很神奇了,先是推迟三天,后是评测鸡崩了,unrated...
题意:每一行,每一列必须都要至少有一个s,n要可以到所有的黑格,n的上下左右如果有一个s,他就可以往那个方向移动一格,n最后不能在白格,求n最少的个数。
题解:
1、每一行每一列如果有#,#必须是连续的,否则输出-1
2、如果有一行没有#,那么至少有一列要没有#,s就可以放在交点处,否则输出-1。
3、求解连通块的个数
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 char a[1010][1010];
6 bool x[1010],y[1010]; //x记录有#的行,y记录有#的列
7 int dx[]={1,-1,0,0};
8 int dy[]={0,0,1,-1};
9
10 void dfs(int xx,int yy)
11 {
12 a[xx][yy]='.';
13 for(int i=0;i<4;i++){
14 int xxx=xx+dx[i];
15 int yyy=yy+dy[i];
16 if(a[xxx][yyy]=='#') dfs(xxx,yyy);
17 }
18 return ;
19 }
20
21 int main()
22 {
23 ios::sync_with_stdio(false);
24 cin.tie(0);
25 cout.tie(0);
26 int n,m;
27 cin>>n>>m;
28 for(int i=0;i<n;i++) cin>>a[i];
29 int flag=1;
30 for(int i=0;i<n;i++){
31 for(int j=0;j<m;j++){
32 if(a[i][j]=='#') {
33 if(x[i]&&j&&a[i][j-1]!='#'){
34 flag=0;
35 break;
36 }
37 if(y[j]&&i&&a[i-1][j]!='#'){
38 flag=0;
39 break;
40 }
41 x[i]=1,y[j]=1;
42 }
43 }
44 if(!flag) break;
45 }
46 int p=0,q=0;
47 for(int i=0;i<n;i++) if(!x[i]) p=1;
48 for(int i=0;i<m;i++) if(!y[i]) q=1;
49 if(p^q) flag=0; //如果有行没有# 而没有列没有#或者反过来,就输出-1.
50 if(!flag) {cout<<-1<<endl;return 0;}
51 int ans=0;
52 for(int i=0;i<n;i++){
53 for(int j=0;j<m;j++){
54 if(a[i][j]=='#') ans++,dfs(i,j); //简单的找连通块
55 }
56 }
57 cout<<ans<<endl;
58 return 0;
59 }
Codeforces 1345 D - Monopole Magnets的更多相关文章
- Codeforces Round #330 (Div. 1) C. Edo and Magnets 暴力
C. Edo and Magnets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594/pr ...
- CodeForces - 344A Magnets (模拟题)
CodeForces - 344A id=46664" style="color:blue; text-decoration:none">Magnets Time ...
- codeforces Magnets
link:http://codeforces.com/contest/344/problem/A 这道题目很简单. 把输入的01 和10 当做整数,如果相邻两个数字相等的话,那么就属于同一组,否则,就 ...
- Codeforces 344A Magnets
Description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't need dom ...
- coderforces Gym 100803A/Aizu 1345/CSU 1536/UVALive 6832 Bit String Reordering(贪心证明缺)
Portal: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1345 http://codeforces.com/gym/100 ...
- Codeforces Round #639 (Div. 2)
Codeforces Round #639 (Div. 2) (这场官方搞事,唉,just solve for fun...) A找规律 给定n*m个拼图块,每个拼图块三凸一凹,问能不能拼成 n * ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
随机推荐
- 剑指offer 面试题0:扎实的基础:即编程语言、数据结构和算法
编程语言: Q:如果写的函数需要传入一个指针,则是否需要为该指针加上const?把const加在指针不同的位置是否有区别? A:const是用来声明一个常量的,如果不想让一个值改变就应该加上const ...
- MyBatis 查询数据时属性中多对一的问题(多条数据对应一条数据)
数据准备 数据表 CREATE TABLE `teacher`( id INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY ( ...
- 经常使用的Sublime Text 快捷键
最常用的 Sublime快捷键:
- SGA: allocation forcing component growth分析
1.问题现象 20年12月31日,数据库应用人员反映2020-12-31 12:40:10存在告警,过了几分钟之后业务恢复正常. 表现的状态:Connect to database time out, ...
- ABAP 多表联合查询
inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录 ...
- Junit测试和反射
Junit单元测试 测试分类 黑盒测试:不需要写代码,给输入值,看程序能否得到输出期望值. 白盒测试:需要些代码,关注程序具体的执行流程. Junit的使用 步骤 定义一个测试类(测试用例). 定义测 ...
- mysql 设置外键约束时如何删除数据
Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新 ...
- 数据库 | 001-MySQL梳理系列(一)
MySQL基本组成 SQL执行流程 Server 层主要包括连接器.查询缓存.分析器.优化器.执行器,包含了MySQL主要的很多核心功能,以及所有的内置函数.存储过程.触发器.视图等,其实就是所有跨存 ...
- TCP报文段的首部格式 20字节的固定首部
<---- IP首部 TCP首部 TCP报文段的数据部分 <---- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...
- 使用“2”个参数调用“SetData”时发生异常:“程序集“
使用"2"个参数调用"SetData"时发生异常:"程序集"Microsoft.VisualStudio.ProjectSystem.VS. ...