(今天yy出奇的不活泼,认真的吓人)

【传送门】

算法标签:


思路啊qwq:

  • part1:

  • 想法是先暴搜出每一行的1,取最前方一个1和最后方一个1,然后中间的0填上色,80分,因为没有考虑到“00011100101”这样类似的的情况。
  • #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<queue>
    #include<cmath>
    using namespace std;
    int n,minx=,miny[],maxx,maxy[];
    int a[][],ans[][];
    bool vis[][];
    int dx[]={,,-,};
    int dy[]={,,,-};
    struct az{
    int x,y;
    };
    az fz(int x,int y){
    az rtn;
    rtn.x=x;
    rtn.y=y;
    return rtn;
    }
    bool pan(int x,int y){
    return x>=&&y>=&&x<=n&&y<=n&&vis[x][y]==;
    }
    queue<az> q;
    void bfs(){
    q.push(fz(,));
    vis[][]=;
    int num=;
    while(!q.empty()){
    az h=q.front();
    q.pop();
    for(int i=;i<;i++){
    int xx=h.x,yy=h.y;
    if(pan(xx+dx[i],yy+dy[i])){
    xx+=dx[i];
    yy+=dy[i];
    if(a[xx][yy]==){
    ans[++num][]=xx;
    ans[num][]=yy;
    if(xx<minx)minx=xx;if(xx>maxx)maxx=xx;
    if(yy>maxy[xx])maxy[xx]=yy;
    if(yy<miny[xx])miny[xx]=yy;
    }
    q.push(fz(xx,yy));
    vis[xx][yy]=;
    }
    }
    }
    for(int i=minx;i<=maxx;i++)
    for(int j=miny[i];j<=maxy[i];j++)
    if(a[i][j]==)
    a[i][j]=;
    }
    int main(){
    scanf("%d",&n);
    for(int i=;i<=n;i++)
    for(int j=;j<=n;j++)
    scanf("%d",&a[i][j]);
    memset(miny,,sizeof(miny));
    bfs();
    for(int i=;i<=n;i++){
    for(int j=;j<=n;j++)
    cout<<a[i][j]<<" ";
    cout<<endl;
    }
    }

    然后下载了最后一个数据,我做了一个伟大的打表水数据的决定qwq:

  • 但是良心不安啊,于是我又想了一个神奇的思路:
  • 根据题意,当找到第一个1时,其右下必然是圈内的0,那么只要从这个0开始广搜寻找联通块就可以了。
  • 所以就这这个写了一个程序:
  • #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<queue>
    #include<cmath>
    using namespace std;
    int n,sy,sx;
    int a[][];
    bool vis[][],b;
    int dx[]={,,-,};
    int dy[]={,,,-};
    bool panduan(int x,int y){ }
    struct az{
    int x,y;
    };
    az fz(int x,int y){
    az rtn;
    rtn.x=x;
    rtn.y=y;
    return rtn;
    }
    bool pan(int x,int y){
    return x>=&&y>=&&x<=n&&y<=n&&vis[x][y]==;
    }
    queue<az> q;
    void bfs(){
    q.push(fz(,));
    vis[][]=;
    int num=;
    while(!q.empty()){
    az h=q.front();
    q.pop();
    for(int i=;i<;i++){
    int xx=h.x,yy=h.y;
    if(a[xx][yy]==){
    sx=xx+;
    sy=yy+;
    b=;
    break;
    }
    if(pan(xx+dx[i],yy+dy[i])){
    xx+=dx[i];
    yy+=dy[i];
    q.push(fz(xx,yy));
    vis[xx][yy]=;
    }
    }
    if(b==)break;
    }
    queue<az> Q;
    Q.push(fz(sx,sy));
    a[sx][sy]=;
    while(!Q.empty()){
    az hh=Q.front();
    Q.pop();
    for(int i=;i<;i++){
    int aa=hh.x,bb=hh.y;
    aa+=dx[i];
    bb+=dy[i];
    if(a[aa][bb]==){
    Q.push(fz(aa,bb));
    a[aa][bb]=;
    } }
    }
    }
    int main(){
    scanf("%d",&n);
    for(int i=;i<=n;i++)
    for(int j=;j<=n;j++)
    scanf("%d",&a[i][j]);
    bfs();
    for(int i=;i<=n;i++){
    for(int j=;j<=n;j++)
    cout<<a[i][j]<<" ";
    cout<<endl;
    }
    }

    end-

【洛谷p1162】填涂颜色的更多相关文章

  1. 洛谷 P1162 填涂颜色 DFS

    P1162 填涂颜色 https://www.luogu.com.cn/problem/P1162 qaq搜索好抽象啊,蒟蒻表示难以理解,搞半天才做出来一道题,很挫败www 思路 染色法.找墙壁外的连 ...

  2. 洛谷P1162—填涂颜色

    这应该是是第一次记录洛谷题库里的题目吧: 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \ ...

  3. 洛谷 P1162 填涂颜色

    题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要 ...

  4. 洛谷 P1162 填涂颜色【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1162 题目描述 由数字 0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1 构成,围圈时只走上下左右 4 ...

  5. 洛谷—— P1162 填涂颜色

    https://www.luogu.org/problem/show?pid=1162 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭 ...

  6. 洛谷 P1162 填涂颜色题解

    题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...

  7. 洛谷P1162 填涂颜色【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1162 题意: 有一个0和1组成的矩阵,一些1组成一个闭合圈,圈住一些0,现在要把被圈住的这些0变成2输出. ...

  8. 洛谷P1162 填涂颜色

    题目链接:https://www.luogu.org/problemnew/show/P1162 这道题是LITTLESUN写的第一道BFS哦! 对于这道题的的思路是把封闭图形外边的0标记一边,在最后 ...

  9. 洛谷 - P1162 - 填涂颜色 - 简单搜索

    https://www.luogu.org/problemnew/show/P1162 在外面加一圈0把0连起来,然后把所有0换成2,再从(0,0)把连通的2全部改回来. 这也是一个判断内外圈的好办法 ...

  10. luogu P1162 填涂颜色 x

    P1162 填涂颜色 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和 ...

随机推荐

  1. java操作JacocClient下载dump文件

    记录瞬间 import org.jacoco.core.data.ExecutionDataWriter; import org.jacoco.core.runtime.RemoteControlRe ...

  2. 漫谈GUI开发—各种平台UI开发概况

    前言: 在看这边文章前,可以建议看下:图形界面操作系统发展史——计算机界面发展历史回顾 从CS到BS,现在的前端开发,其实也是GUI开发范畴.现今 各平台的UI开发概况 HTML&CSS,Wi ...

  3. Redis批量导入数据的方法

    有时候,我们需要给redis库中插入大量的数据,如做性能测试前的准备数据.遇到这种情况时,偶尔可能也会懵逼一下,这里就给大家介绍一个批量导入数据的方法. 先准备一个redis protocol的文件( ...

  4. 常用MSSQL语句

    现在很少用SQL 写东西,但有时真用起来半天想不起来,看来还是有必要记录一下... 新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1) PRIMA ...

  5. Centos7 下yum安装mysql

  6. echart的x换行

    option = { legend: { y: 'bottom', data:['该业务正常类比例','该业务关注类比例','该业务不良类比例'] }, xAxis: { type: 'categor ...

  7. css中height 100vh的应用场景,动态高度百分比布局,浏览器视区大小单位

    css中height 100vh的应用场景,动态高度百分比布局,浏览器视区大小单位 height:100vh 一些只能vw, vh才能完成的应用场景: 1. 场景之:元素的尺寸限制 vw vh 主要是 ...

  8. GO语言的包

    包介绍 包(package)是多个Go源码的集合,go语言有很多内置包,比如fmt,os,io等. 定义包 main包是一个可执行的包,只应用程序的入口包,编译完会生成一个可执行文件. 包名可以不和文 ...

  9. leetCode 字符串相关问题

    125. 验证回文串 /* * 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. * 输入: "A man, a plan, a canal: Panama& ...

  10. 史上最全!Selenium元素定位的30种方式

    Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制,我在这里将对各种元素定位方式进行总结归纳一下. 这里将统一使用百度 ...