【NOIP2017提高组模拟12.18】B
来源:互联网 发布:淘宝怎么换支付宝绑定 编辑:程序博客网 时间:2024/06/01 10:27
Description
在两个n*m的网格上染色,每个网格中被染色的格子必须是一个四联通块(没有任何格子被染色也可以),四联通块是指所有染了色的格子可以通过网格的边联通,现在给出哪些格子在两个网格上都被染色了,保证网格的最外围一层不会在两个网格中同时被染色,即所有处于第x行第y列满足x=1或x=n或y=1或y=m的格子不会被在两个网格中同时被染色,请求出任意一种染色的方案,如果无解,请输出-1。
Solution
这是一道奇妙的题目。
比赛的时候想到了可能是构造的方法,但是没有想到如何优美的构造,最后只能打了个60分的暴力。
为了保证联通,我们把第一列分给第一个矩阵,最后一列分给第二个矩阵,然后奇数行分给第一个矩阵,偶数行分给第二个矩阵,这样可以先保证矩阵是联通的而且不相交,然后再把矩阵之间重叠的部分,加上去就好了。
Code
#include<iostream>#include<stdio.h>#include<math.h>#include<algorithm>#include<math.h>#define fo(i,a,b) for(i=a;i<=b;i++)const int maxn=507;using namespace std;int i,j,k,l,t,n,m,ans,sx,sy,tot,x,y;char s[maxn][maxn];int a[maxn][maxn],b[maxn][maxn];int main(){ //freopen("fan.in","r",stdin); scanf("%d%d",&n,&m); fo(i,1,n){ scanf("%s",s[i]+1); fo(j,1,m)if(s[i][j]=='1')a[i][j]=b[i][j]=1; } fo(i,1,n){ if(i%2)fo(j,1,m)a[i][j]=1; else fo(j,1,m)b[i][j]=1; } fo(i,1,n)a[i][1]=b[i][m]=1,a[i][m]=b[i][1]=0; fo(i,1,n){fo(j,1,m)printf("%d",a[i][j]);printf("\n");} printf("\n"); fo(i,1,n){fo(j,1,m)printf("%d",b[i][j]);printf("\n");}}
1 0
- B【NOIP2017提高组模拟12.18】
- 【NOIP2017提高组模拟12.18】B
- 【JZOJ4929】 【NOIP2017提高组模拟12.18】B
- 【NOIP2017提高组模拟12.18】B
- 【JZOJ4929】【NOIP2017提高组模拟12.18】B
- 【NOIP2017提高组模拟12.24】B
- 【JZOJ4932】【NOIP2017提高组模拟12.24】B
- 【NOIP2017提高组模拟12.24】B
- 【NOIP2017提高组模拟6.27】B
- {小结}2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组总结
- 2017.04.15【NOIP2017提高组】模拟赛B组 总结
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组
- 2017.04.15【NOIP2017提高组】模拟赛B组题解
- JZOJ 4932. 【NOIP2017提高组模拟12.24】B
- 【JZOJ 4932】【NOIP2017提高组模拟12.24】B
- Web Api 托管
- c bool 和c++bool 的区别
- 很好的找工作内容
- Mariadb----字符类型 (五)
- 面向对象银行管理系统JAVA代码《下》
- 【NOIP2017提高组模拟12.18】B
- Android开发常用开源框架2
- JavaScript 精粹 基础 进阶(9)OOP面向对象编程(下)
- Oracle分析函数——函数RANK,DENSE_RANK,FIRST,LAST…
- [问题]AS的问题集锦
- redeme
- redis相关概念
- 欢迎使用CSDN-markdown编辑器
- jstree plguins小记