首页 > 其他分享 >[刷题笔记] CF1059B Forgery

[刷题笔记] CF1059B Forgery

时间:2023-06-18 11:55:34浏览次数:48  
标签:std int 染色 Forgery CF1059B && include 刷题

Problem

Solution

搜索染色类。

我们发现染色是不可逆的,也就是染成了#后不得染回“.”,所以对于每次染色我们都要尽可能向std上靠拢。

我们可以观察一下std,发现需要尽可能从std上的“.”向四周染色(因为3*3染色中间的"."不染)。每次染色前需要判断染完这一部分是否和std一致,如果一致则可以染色(因为染色不可逆)

代码实现较易。

Code

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 1010
using namespace std;
int n,m;
char mapp[N][N],ans[N][N];
int dx[8]={0,1,1,1,0,-1,-1,-1}; //3*3八方向
int dy[8]={1,1,0,-1,-1,-1,0,1};
bool get_ans = false;
bool chk(int x,int y)
{
    for(int i=0;i<8;i++)
    {
        int ax = x+dx[i];
        int ay = y + dy[i];
        if(ax >= 1 && ax <= n && ay >= 1 && ay <= m && mapp[ax][ay] == '#') continue; 
        else return false; //如果染色的这个点越界或者std上这个点为"."则不得染色
    }
    return true;
 //   return true;
}
void full(int x,int y)
{
    for(int i=0;i<8;i++)
    {
        int ax = x + dx[i];
        int ay = y + dy[i];
        if(ax >= 1 && ax<= n && ay >= 1 && ay <= m)
            ans[ax][ay] = '#';
    }
}
bool check_ok()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) if(ans[i][j] != mapp[i][j]) return false;
    }
    return true;
}
void print()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) cout<<ans[i][j];
        cout<<endl;
    }
}
int main()
{
    memset(ans,'.',sizeof(ans));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++) cin>>mapp[i][j];
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(chk(i,j))
            {
              //  cout<<i<<" "<<j<<endl;
                full(i,j);
                if(check_ok()) 
                {
                    get_ans = true;
                    cout<<"YES"<<endl;
                    return 0;
                }
            }
        }
    }
    if(check_ok()) cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
    return 0;
}

标签:std,int,染色,Forgery,CF1059B,&&,include,刷题
From: https://www.cnblogs.com/SXqwq/p/17488923.html

相关文章

  • 20230612刷题总结
    2023/06/12刷题总结A-DoubleCola如果n在1到5之间先单独判断是谁.如果大于5之后,用一个cnt记录当前这一组由几个人排在一起,然后使用循环每次动态的删除人数,直到找到n在那一组,然后将剩下的n直接整除pow(2,cnt)就可以了.#include<bits/stdc++.h>#defineintlonglong#d......
  • P1707 刷题比赛 题解
    多少有点混乱邪恶。题意:给出递推式:\[a_1=b_1=c_1=1\\a_2=b_2=c_2=3\\\begin{aligned}a_k&=p\timesa_{k-1}+q\timesa_{k-2}&+b_{k-1}+c_{k-1}&+r(k-2)^2+t(k-2)+1\\b_k&=u\timesb_{k-1}+v\timesb_{k-2}&+a_{k-1}+c_{k-1}&+w^{k-2}\\c......
  • java刷题网站最近更新的面试题
    49个人中至少几个人生日是同一月?如何用3升和5升桶量取4升水?JVM逃逸分析默认是开启还是关闭?ZGC有缺点吗?JVM对Java的原生锁做了哪些优化?为什么wait(),notify()和notifyAll()必须在同步方法或者同步块中被调用?什么是锁消除和锁粗化?为什么代码会重排序?什么是自旋?你们线程池是怎......
  • 算法刷题记录:P1518 [USACO2.4]两只塔姆沃斯牛 The Tamworth Two
    题目链接:https://www.luogu.com.cn/problem/P1518题目分析这道模拟题很典型了,给定了一个固定的移动方式,去模拟即可,该题说:如果牛和农夫永远不会相遇输出0,我没想到很好的方法,不推荐我这样的写法。算勉强AC吧。AC代码//Problem:P1518[USACO2.4]两只塔姆沃斯牛TheTamwort......
  • 算法刷题记录:P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
    题目链接https://www.luogu.com.cn/problem/P1328题目分析是一道和环有关的问题,直接模拟即可AC代码//Problem:P1328[NOIP2014提高组]生活大爆炸版石头剪刀布//Contest:Luogu//URL:https://www.luogu.com.cn/problem/P1328//MemoryLimit:125MB//TimeLimit......
  • 算法刷题记录:P4924 [1007]魔法少女小Scarlet
    题目链接https://www.luogu.com.cn/problem/P4924题目分析题意为将以[x,y]为中心某个矩阵,逆时针/顺时针旋转。所以其本质就是矩阵的旋转,所以找出通项公式即可。通项公式:顺时针:x后=x+y-y原,y后=y-x+x原逆时针:x后=x-y+y原,y后=x+y-x原AC代码//Problem:P4924[1007]魔法少......
  • Python小屋刷题软件2425道题目分类速查表
    “Python小屋”编程比赛正式开始Python小屋刷题软件客户端使用说明(视频讲解)Python小屋刷题神器最近升级的新功能介绍每次录入新题目时都会更新下面的分类表,请注意查看最新信息。客观题分类:Python基础知识:1-57内置函数、运算符:58-320列表、元组、字典、集合、切片、推导式:321-792选......
  • Python小屋刷题神器题目分类速查表
    每次录入新题目时都会更新下面的分类表,请注意查看最新信息。客观题:Python基础知识:1-36内置函数、运算符:37-271列表、元组、字典、集合、切片、推导式:272-679选择结构与循环结构:680-765字符串操作:766-988正则表达式:989-1080函数定义与使用:1081-1220面向对象程序设计:1221-1293文件操......
  • 算法刷题记录:P1563 [NOIP2016 提高组] 玩具谜题
    题目链接https://www.luogu.com.cn/problem/P1563题目分析既然是环形问题,那么直接取模来进行模拟即可,注意顺时针和逆时针顺时针的箭头是向左拐,是+,逆时针的箭头是向右拐,是-AC代码//Problem:P1563[NOIP2016提高组]玩具谜题//Contest:Luogu//URL:https://www.luo......
  • 【华为HCIP | 高级网络工程师】刷题日记(9)
    个人名片:......