首页 > 其他分享 >识海社区打卡-4

识海社区打卡-4

时间:2024-11-13 23:41:20浏览次数:1  
标签:社区 识海 int typedef long 好人 坏人 打卡

今天打卡大模拟

Problem - 1365D - Codeforces

image-20241113234004941

大模拟确实恶心人,但作为最臭的屎平时还是得多吃点,大模拟的特点是思路不算很难但代码真的很长很长,一个不小心哪里写得有问题查错就是半天,各种细节都要很注意,对于提升自己查错能力和快速写题能力还是很有帮助的,这种屎虽然恶心但是就是得多吃。

简单说下题意,大概就是给定一个网格图,网格图有四种符号,#代表墙,B代表bad坏人,G代表good好人, "."代表空白,可以把一些空白变成墙,然后使所有好人能跑走,坏人留下,并且只有跑到[n,m]才算逃出生天。

思路很简单,就是把所有坏人都关起来,好人不能和坏人相邻,并且好人没有被关起来的。

代码实现

#include <bits/stdc++.h>
using namespace std;
const char nl = '\n';
#define all(x) (x).begin(), (x).end()
typedef long long ll;
typedef long double ld;
typedef long long int lli;
const int MOD = 1'000'000'007;
constexpr int inf = 1e9;

constexpr int dx[] = {0, 0, -1, 1}, dy[] = {-1, 1, 0, 0};

void solve()
{
  int n, m;
  cin >> n >> m;
  vector<string> a(n);
  int res = 0;
  for (int i = 0; i < n; i++)
  {
    cin >> a[i];
    res += count(a[i].begin(), a[i].end(), 'G');
  }
  if (res == 0)
  {
    cout << "YES" << nl;
    return;
  }
  a[n - 1][m - 1] = 'G';
  for (int i = 0; i < n; i++)
  {
    for (int j = 0; j < m; j++)
    {
      if (a[i][j] == 'B')
      {
        for (int k = 0; k < 4; k++)
        {
          int x = j + dx[k], y = i + dy[k];
          if (x < m && x >= 0 && y >= 0 && y < n)
          {
            if (a[y][x] == 'G')
            {
               cout << "NO" << nl;
              return;
            }
            if (a[y][x] == '.')
            {
              a[y][x] = '#';
            }
          }
        }
      }
    }
  }

  vector<vector<bool>> vis(n, vector<bool>(m));
  queue<pair<int, int>> q;
  vis[n - 1][m - 1] = 1;
  q.emplace(n - 1, m - 1);
  while (!q.empty())
  {
    auto [i, j] = q.front();
    q.pop();
    for (int k = 0; k < 4; ++k)
    {
      int x = i + dx[k], y = j + dy[k];
      if (0 <= x && x < n && 0 <= y && y < m && a[x][y] != '#' && !vis[x][y])
      {
        
        vis[x][y] = true;
        q.emplace(x, y);
      }
    }
  }

  for(int i = 0;i < n;i++){
    for(int j = 0;j < m;j++){
      if(a[i][j] == 'G' && !vis[i][j]){
        cout << "NO" << nl;
        return;
      }
    }
  }
 
  cout << "YES" << nl;
}

int main()
{
  ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t = 1;
  cin >> t;
  while (t--)
  {
    solve();
  }
  return 0;
}

代码的思路就是先查找有没有好人,如果没有就直接把出口堵上就好了所以肯定是yes因为题目保证了出口是空白

其次是把最后的位置变为一个好人,因为当好人和坏人分别在出口的上方和左方时是不行的,直接把这种情况算到好人和坏人相邻就行,然后查找好人与坏人相邻的情况,并且把所有坏人都关上。

最后是从出口开始查找对于所有通出口的地方都标记为1,所有不通的地方都标为0,然后查找好人被关的情况就行。

标签:社区,识海,int,typedef,long,好人,坏人,打卡
From: https://www.cnblogs.com/coloury/p/18545081

相关文章

  • 每日打卡 11.13
    includeusingnamespacestd;definemax10voidswap(int*px,int*py);voidbubble(inta[],intn);intmain(){intn,a[max];inti;cout<<"输入n"<<endl;cin>>n;cout<<"输入n个数"<<endl;for(i=0;......
  • 考研打卡(16)
    开局(16)开始时间 2024-11-13 15:51:25结束时间 2024-11-13 17:59:04现在在1016数据结构某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=rear=10.该队列中的元素个数为______(苏州大学2009年)A1B0C1或0D不确定A......
  • SpringBoot颐养社区中心系统之管理员子系统vd22x
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着老龄化社会的到来,颐养社区的建设日益受到重视。为了提高颐养社区的管理效率和服务质量,我们计划开发一套颐养社区中心系统。其中,管......
  • 微信小程序PHP+uniapp社区后勤报修系统
    目录项目介绍具体实现截图微信开发者工具HBuilderX+uniapp开发技术简介文件解析设计思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析详细视频演示源码获取项目介绍小程序端运行软件微信开发者工具/hbuiderx基于微信小程序的社区后勤报修系......
  • 一同掀起人工智能艺术新浪潮!无问芯穹即将出席2024东京ComfyUI全球社区峰会
    ......
  • 打卡信奥刷题(225)用C++工具信奥P1760[普及组/提高] 通天之汉诺塔
    通天之汉诺塔题目背景直达通天路·小A历险记第四篇题目描述在你的帮助下,小A成功收集到了宝贵的数据,他终于来到了传说中连接通天路的通天山。但是这距离通天路仍然有一段距离,但是小A突然发现他没有地图!!!但是幸运的是,他在山脚下发现了一个宝箱。根据经验判断(小A有经......
  • 力扣21 打卡15 长度为 K 的子数组的能量值 II
    思路:该算法使用滑动窗口和计数器来判断每个长度为(k)的子数组是否满足连续递增的条件。遍历数组时,使用cnt记录当前连续递增的元素数。如果当前元素和前一个元素不连续递增,则将cnt重置为1,否则增加cnt。当cnt大于等于(k)时,表示找到了一个满足条件的子数组,将......
  • 考研打卡(15)
    开局(15)开始时间 2024-11-12 20:37:51结束时间 2024-11-12 22:41:32现在在敷泥膜数据结构设已知一稀疏矩阵的三元组表为:(1,2,3),(1,6,1),(3,1,5),(3,2,-1)(5,4,5),(5,1,-3),则其转置矩阵的三元组表中的第三个三元组为____(山东大学2013年)A(2,1,3)B(3,1,5)C(3,2,-1)D(2,3,-1)A......
  • 基于java+springboot的社区帮帮团系统网站
    前言基于java+springboot的社区帮帮团系统网站是一个促进社区互助的综合性平台。它为社区居民提供便捷的注册与登录入口。居民可发布求助信息,详细描述问题,如家电维修、管道疏通、家教需求等,并可设置悬赏金额。同时,有能力提供帮助的居民能浏览这些求助,根据自身技能和......
  • 打卡信奥刷题(222)用C++信奥P1746[普及组/提高] 离开中山路
    离开中山路题目背景《爱与愁的故事第三弹·shopping》最终章。题目描述爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在x1,......