Colorful Grid Codeforces Round 910 (Div. 2) C

news2024/9/24 11:23:57

Problem - C - Codeforces

题目大意:有一个n*m的网格,要求从(1,1)走到(n,m),同时要求路径的长度必须为k+1,然后给每个两点之间的路径染成红色或蓝色,要求任意两个相邻线段颜色不能相同,求涂色的方案

3<=n,m<=16;1<=k<=1e9

思路:首先如果要从(1,1)走到(n,m),最短路径上的线段数len=n-1+m+1,如果k<len,就没有构造方案,其他情况下,这个最短路上的颜色直接一个红一个蓝即可,接下来考虑我们还要走的k-len条线段,

        在到达终点后,我们可以在终点所在的那个小正方形里绕圈,这样就能满足所有的k=len+4x,如下图中被圈起来的部分:

然后考虑其他的k能否被走出来,我们发现,如果在到终点前,在右下角的小三角上面绕一下,就可以走len+2步,然后因为n>=3,所以可以在右下再上面一个小正方形里绕圈,这样就得到了所有的k=len+2+4x,如下图:

这样的话所有的偶数k-len就能都能找到一种合法的走法,然后发现如果k-len是奇数,无论如何都找不到一种走法,所以根据k和冷的关系分类讨论即可

#include<bits/stdc++.h>
//#include<__msvc_all_public_headers.hpp>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
const ll MOD = 1e9 + 7;
int n;
int m;
ll a[N];
char ma1[20][20],ma2[20][20];
void init()
{
    for (int i = 1; i <= n; i++)
    {//先都初始化成任意颜色
        for (int j = 1; j <= m; j++)
        {
            ma1[i][j] = 'R';
            ma2[i][j] = 'R';
        }
    }
}
void solve()
{
    cin >> n;
    cin >> m;
    init();
    ll k;
    cin >> k;
    ll len = n - 1 + m - 1;
    if (k < len || (k - len) % 2 == 1)
    {//k<最短路或k-最短路是奇数,就没有合法路线
        cout << "NO\n";
        return;
    }
    cout << "YES\n";
    if ((k - len) % 4 == 0)
    {//k-len是4的倍数,就要去右下角的正方形绕圈
        for (int i = 1; i <= n-1; i++)
        {涂最左一列的最短路
            if (i & 1)
                ma1[i][1] = 'R';
            else
                ma1[i][1] = 'B';
        }
        if (ma1[n - 1][1] == 'R')
            ma2[n][1] = 'B';//涂最下面一行最短路
        else
        {
            ma2[n][1] = 'R';
        }
        for (int i = 2; i <= m-1; i++)
        {
            if (ma2[n][i-1] == 'R')
                ma2[n][i] = 'B';
            else
                ma2[n][i] = 'R';
        }
        if (ma2[n][m - 1] == 'R')//涂右下角的小正方形
            ma1[n - 1][m] = ma1[n - 1][m - 1] = 'B';
        else
            ma1[n - 1][m] = ma1[n - 1][m - 1] = 'R';
        ma2[n - 1][m - 1] = ma2[n][m - 1];
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m - 1; j++)
            {
                cout << ma2[i][j] << " ";
            }
            cout << '\n';
        }
        for (int i = 1; i <= n - 1; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                cout << ma1[i][j] << " ";
            }
            cout << '\n';
        }
        return;
    }
    if ((k - len - 2) % 4 == 0)
    {//k-len-2是4的倍数,最后一个小正方形往上绕
        for (int i = 1; i <= n - 1; i++)
        {//涂最左一列
            if (i & 1)
                ma1[i][1] = 'R';
            else
                ma1[i][1] = 'B';
        }
        if (ma1[n - 1][1] == 'R')
            ma2[n][1] = 'B';//涂最下面一行
        else
        {
            ma2[n][1] = 'R';
        }
        for (int i = 2; i <= m - 1; i++)
        {
            if (ma2[n][i - 1] == 'R')
                ma2[n][i] = 'B';
            else
                ma2[n][i] = 'R';
        }
        if (ma2[n][m - 2] == 'R')//涂右下角小正方形
            ma1[n - 1][m] = ma1[n - 1][m - 1] = 'B';
        else
            ma1[n - 1][m] = ma1[n - 1][m - 1] = 'R';
        ma2[n - 1][m - 1] = ma2[n][m - 2];//涂右下角上面一个小正方形
        if (ma2[n - 1][m - 1] == 'R')
        {
            ma1[n - 2][m] = ma1[n - 2][m - 1] = 'B';
        }
        else
        {
            ma1[n - 2][m] = ma1[n - 2][m - 1] = 'R';
        }
        ma2[n - 2][m - 1] = ma2[n - 1][m - 1];
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= m - 1; j++)
            {
                cout << ma2[i][j] << " ";
            }
            cout << '\n';
        }
        for (int i = 1; i <= n - 1; i++)
        {
            for (int j = 1; j <= m; j++)
            {
                cout << ma1[i][j] << " ";
            }
            cout << '\n';
        }
    }
    cout << '\n';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--)
    {
        solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MSF学习

之前的渗透测试中 其实很少用到 cs msf 但是在实际内网的时候 可以发现 msf cs 都是很好用的 所以现在我来学习一下 msf的使用方法 kali自带msf https://www.cnblogs.com/bmjoker/p/10051014.html 使用 msfconsole 启动即可 首先就是最正常的木马生成 所以这里其实只需…

Selenium三大等待(详解版)

一、强制等待 1.设置完等待后不管有没有找到元素&#xff0c;都会执行等待&#xff0c;等待结束后才会执行下一步 2.实例&#xff1a; driver webdriver.Chrome()driver.get("https://www.baidu.com")time.sleep(3) # 设置强制等待driver.quit() 二、隐性等待 …

【Spring】04 国际化

文章目录 1. 定义2. Spring 的支持1&#xff09; MessageSource接口2&#xff09; ResourceBundleMessageSource 3. 配置国际化1&#xff09;配置MessageSource Bean2&#xff09;创建资源文件3&#xff09;在Bean中使用国际化消息 4. 使用占位符和参数结语 Spring 为我们提供了…

深入理解C语言的函数参数

1、一个简单的函数 int Add(int x, int y) {return x y; }int main() {printf("%d", Add(2, 3, 4, 5, 6));return 0; } 这一段足够简单的代码&#xff0c;闭眼都能知道运行结果会在屏幕上打印 5 。那编译器是怎么处理后面的 4、5、6 &#xff1f; 我们再看看这个函…

【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念&#xff1a; 对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆&#xff0c;这类小饭馆有个很显著的特点&#xff1a;洗菜、切菜、炒菜都是同一个人完成&#xff0c;如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分…

【Qt之QNetworkAccessManager】概述及示例

概述 QNetworkAccessManager类允许应用程序发送网络请求和接收应答 网络访问API是围绕一个QNetworkAccessManager对象构建的&#xff0c;该对象为它发送的请求保存通用配置和设置。它包含代理和缓存配置&#xff0c;以及与此类问题相关的信号&#xff0c;以及可用于监视网络操…

【Linux API 揭秘】container_of函数详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

leetcode-21-合并两个有序链表(C语言实现)

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出…

不用再找,这是大模型 LLM 微调经验最全总结

大家好&#xff0c;今天对大模型微调项目代码进行了重构&#xff0c;支持ChatGLM和ChatGLM2模型微调的切换&#xff0c;增加了代码的可读性&#xff0c;并且支持Freeze方法、Lora方法、P-Tuning方法、「全量参数方法」 微调。 PS&#xff1a;在对Chat类模型进行SFT时&#xff…

一款计算机顶会爬取解析系统 paper info

一款计算机顶会爬取解析系统 paper info 背景项目实现的功能 技术方案架构设计项目使用的技术选型 使用方法本地项目部署使用ChatGPT等大模型创建一个ChatGPT助手使用阿里云 顶会数据量 百度网盘pfd文件json文件 Q&A github链接 &#xff1a;https://github.com/codebricki…

PyTorch 模型训练性能大揭秘:从基础到高级技巧一网打尽!

PyTorch 是一个开源的 Python 机器学习库&#xff0c;基于Torch&#xff0c;用于自然语言处理等应用程序。 PyTorch既可以看作加入了GPU支持的numpy&#xff0c;也可以看成一个拥有自动求导功能的强大的深度神经网络&#xff0c;同时它也是大模型开发的首选工具。 《PyTorch模…

每日分享,以元旦为题的诗词

元旦佳节即将来临&#xff0c;相信大家都会在朋友圈表达一下自己的情感&#xff0c;不管大家以前是怎么表达的&#xff0c;今天小编给你分享几首以元旦为题的几首诗&#xff0c;喜欢的朋友可以自取&#xff0c;想要更多免费的诗词&#xff0c;请自行百度或小程序搜索&#xff1…

ES中根据主键_id查询记录

一、需求 es中_type&#xff1a;_doc&#xff0c;想要根据主键_id查询记录 二、实现 复合查询中使用语句查询http://192.168.1.1/_doc/1

ArcGIS for Android开发引入arcgis100.15.2

最后再点击同步即可&#xff01;&#xff01;&#xff01;

Stable diffusion 简介

Stable diffusion 是 CompVis、Stability AI、LAION、Runway 等公司研发的一个文生图模型&#xff0c;将 AI 图像生成提高到了全新高度&#xff0c;其效果和影响不亚于 Open AI 发布 ChatGPT。Stable diffusion 没有单独发布论文&#xff0c;而是基于 CVPR 2022 Oral —— 潜扩…

如何用开关电源测试系统测试电源峰值电流?

一、用万用表、示波器测量峰值电流 首先将待测电路输入信号线分别连接到测试电路的输入端和地端。待测电路的电源端连接电源。然后将示波器设置为AC耦合模式&#xff0c;通道1连接待测电路输入端&#xff0c;通道2连接待测电路地端。调整数字万用表为电流测量模式。打开电源&am…

【动手学深度学习】(十三)深度学习硬件

文章目录 一、CPU和GPU二、更多的芯片1.DSP:数字信号处理2.可编程阵列(FPGA)3.AI ASIC 三、单机多卡并行 一、CPU和GPU 提升CPU利用率 在计算ab之前&#xff0c;需要准备数据 主内存->L3->L2->L1->寄存器(数据只有进入寄存器才可以参与运算) 提升空间和时间的内存…

USB2.0 Spec 中文篇

体系简介 线缆 USB 是一种支持热拔插的高速串行传输总线&#xff0c;使用一对&#xff08;两根&#xff09;差分信号来传输数据&#xff0c;半双工。要求使用屏蔽双绞线。 供电 USB 支持 “总线供电” 和 “自供电” 两种供电模式。在总线供电方式下&#xff0c;设备最多可…

C++学习笔记—— C++内存管理方式:new和delete操作符进行动态内存管理

系列文章目录 http://t.csdnimg.cn/d0MZH 目录 系列文章目录http://t.csdnimg.cn/d0MZH 比喻和理解a.比喻C语言开空间C开空间 b.理解a、C语言的内存管理的缺点1、开发效率低&#xff08;信息传递繁琐&#xff09;2、可读性低&#xff08;信息展示混乱&#xff09;3、稳定性差&…

【MATLAB】基于VMD分解的信号去噪算法(基础版)

代码的使用说明 基于VMD分解的信号去噪算法&#xff08;基础版&#xff09; 代码流程图 代码效果图 本文代码&#xff1a;阿里云盘分享 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复VMD去噪 本公众号致力于解决找代…