2024年CCPC网络赛A题题解 —— 军训Ⅰ(gym105336A)

news2024/9/20 0:20:09

       个人认为很唐的一道题,考虑到不少人可能懒得写,我这里给大家发个代码叭,还有一点点题解(因为真的不是很难)。这是题面:

        然后我来讲讲怎么做,不觉得会有多少人题目意思都理解不了叭?这个就是要求你构造一个n*m的方阵,满足经过无限次四种变换后恰好会出现四种本质不同的状态,这里的本质不同就是坐标不同的意思,大家可以好好理解下,然后我们通过手玩一部分的样例可以发现本质不同最多只会有13种状态,即k > 13的时候输出”No“,然后k在1,2,3,4,5,6,7,8,9,10,11,12,13的这几种情况中,k = 8,10,12的时候是完全不行的,对于k = 5的时候我们发现当gcd(n,m) = 1的时候也是不可行的,上述是一部分的不可行情况。

        我们的思路就是枚举k,对于每个k我们需要考虑n和m都比较小的时候也会出现不可行方案,一般来讲就是分n <= 2,m <= 2或者n <= 3和m <= 3的情况需要特殊考虑,因此剩下的我们就分k的大小构造答案就行:

         k = 1:全部站满

         k = 2:空出一行或者一列

         k = 3:空出不相邻的两行或者两列

         k = 4:只放在(1,1)

         k = 5: 一共存放LCM(n,m)个人,排列方式为每行逐渐平移下去,可以手玩一下,比如n = m = 3的情况:

                  

         k = 6:放一个人到四个边界上的不同于端点的一点

                 如n = 2,m = 3:

                      

         k = 7:第一行放满,然后把第一个人放到第二行第一个或者列同理:

                    

         k = 9:直接在(2,2)放上一个,或者对于n = 2,m = 3或n = 3,m = 2的情况在(1,1)(n,m)各方一个就行

         k = 11:对于n >= 2 && m >= 4 || n >= 4 && m >= 2,在(1,2)(2,1)(1,4)或者(4,1)上共放三个,然后对于n = 3,m = 3的时候在(1,1)和(3,2)各放一个即可

         k = 13:直接放在(1 , 3)和(3,1)

        上述对于小范围数据需要加特判,然后没什么思维难度,对细节处理有一定要求,我直接放下代码:

#include<bits/stdc++.h>
#define Alex std::ios::sync_with_stdio(false),std::cin.tie(0),std::cout.tie(0);
#define int long long
#define double long double
const int QAQ = 0;
const int mod = 998244353;
const double pi = std::acos(-1.0);
const double eps = 1e-10;

char a[2005][2005];

signed main()
{
	Alex;
	int _;
	_ = 1;
	std::cin>>_;
	while(_--)
	{
		int n,m,k;
		std::cin>>n>>m>>k;
		for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++) a[i][j] = '-';
		
		if(k > 13)
		{
			std::cout<<"No"<<'\n';
			continue;
		}
		
		if(k >= 8 && k % 2 == 0)
		{
			std::cout<<"No"<<'\n';
			continue;
		}
		
		if(k == 5 && std::__gcd(n,m) == 1)
		{
			std::cout<<"No"<<'\n';
			continue;
		}
		
		if(k == 1)
		{
			std::cout<<"Yes"<<'\n';
			for(int i = 1;i <= n;i++)
			{
				for(int j = 1;j <= m;j++) std::cout<<'*';
				std::cout<<'\n';
			}
			continue;
		}
		
		if(k == 2)
		{
			if(n == 1 && m == 1)
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			std::cout<<"Yes"<<'\n';
			if(n > 1)
			{
			    for(int i = 1;i <= m;i++) std::cout<<'-';
				std::cout<<'\n';
				for(int i = 2;i <= n;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<'*';
					std::cout<<'\n';
				}	
			}else
			{
				for(int i = 1;i <= n;i++)
				{
					std::cout<<'-';
					for(int j = 2;j <= m;j++) std::cout<<'*';
					std::cout<<'\n';
				}
			}
			continue;
		}
		
		if(k == 3)
		{
			if(n < 3 && m < 3)
			{
				if(n == 1 && m == 1)
				{
					std::cout<<"No"<<'\n';
				}
				if(n == 1 && m == 2)
				{
					std::cout<<"No"<<'\n';
				}
				if(n == 2 && m == 1)
				{
					std::cout<<"No"<<'\n';
				}
				if(n == 2 && m == 2)
				{
					std::cout<<"No"<<'\n';
				}
				continue;
			}
			std::cout<<"Yes"<<'\n';
			if(n >= 3)
			{
				for(int i = 1;i <= m;i++) std::cout<<'-';
				std::cout<<'\n';
				for(int i = 2;i <= n - 1;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<'*';
					std::cout<<'\n';
				}
				for(int i = 1;i <= m;i++) std::cout<<'-';
				std::cout<<'\n';
			}else
			{
				for(int i = 1;i <= n;i++)
				{
					std::cout<<'-';
					for(int j = 2;j <= m - 1;j++) std::cout<<'*';
					std::cout<<'-';
					std::cout<<'\n';
				}
			}
			continue;
		}
		
		if(k == 4)
		{
			if(n == 1 || m == 1)
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			if(n >= 2 && m >= 2)
			{
				std::cout<<"Yes"<<'\n';
				std::cout<<'*';
				for(int j = 2;j <= m;j++) std::cout<<'-';
				std::cout<<'\n';
				for(int i = 2;i <= n;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<'-';
					std::cout<<'\n';
				}
			}
			continue;
		}
		
		if(k == 5)
		{
			std::cout<<"Yes"<<'\n';
			int lcm = n * m / std::__gcd(n,m);
			int every = lcm / n;
			for(int i = 1;i <= n;i++)
			for(int j = 1;j <= m;j++) a[i][j] = '-';
			int t = 1;
			every = m / every;
			for(int i = 1;i <= n;i++)
			{
				for(int j = t;j <= m;j = j + every) a[i][j] = '*';
				t++;
				if(t == every + 1) t = 1;
			}
			for(int i = 1;i <= n;i++)
			{
				for(int j = 1;j <= m;j++) std::cout<<a[i][j];
				std::cout<<'\n';
			}
			continue;
		}
		
		if(k == 6)
		{
			if(n >= 3 && m >= 2 || n >= 2 && m >= 3)
			{
				std::cout<<"Yes"<<'\n';
				if(n >= 3)
				{
				    for(int i = 1;i <= m;i++) std::cout<<'-';
				    std::cout<<'\n';
				    std::cout<<'*';
				    for(int i = 2;i <= m;i++) std::cout<<'-';
				    std::cout<<'\n';
				    for(int i = 3;i <= n;i++) 
				    {
				    	for(int j = 1;j <= m;j++) std::cout<<'-';
				    	std::cout<<'\n';
					}
				}else
				{
					std::cout<<'-'<<'*';
					for(int i = 3;i <= m;i++) std::cout<<'-';
					std::cout<<'\n';
					for(int i = 2;i <= n;i++)
					{
						for(int j = 1;j <= m;j++) std::cout<<'-';
						std::cout<<'\n';
					}
				}
			}else
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			continue;
		}
		
		if(k == 7)
		{
			if(n >= 3 && m >= 2 || m >= 3 && n >= 2)
			{
				std::cout<<"Yes"<<'\n';
				for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) a[i][j] = '-';
				if(n >= 3)
				{
					for(int i = 1;i <= m;i++) a[1][i] = '*';
					std::swap(a[1][1],a[2][1]);
					for(int i = 1;i <= n;i++)
					{
						for(int j = 1;j <= m;j++) std::cout<<a[i][j];
						std::cout<<'\n';
					}
				}else
				{
					for(int i = 1;i <= n;i++) a[i][1] = '*';
					std::swap(a[1][1],a[1][2]);
					for(int i = 1;i <= n;i++)
					{
						for(int j = 1;j <= m;j++) std::cout<<a[i][j];
						std::cout<<'\n';
					}
				}
			}else
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			continue;
		}
		
		if(k == 9)
		{
			if(n >= 3 && m >= 3)
			{
				std::cout<<"Yes"<<'\n';
				for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) a[i][j] = '-';
				a[2][2] = '*';
				for(int i = 1;i <= n;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<a[i][j];
					std::cout<<'\n';
				}
			}else
			if(n == 2 && m >= 3 || n >= 3 && m == 2)
			{
				std::cout<<"Yes"<<'\n';
				for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) a[i][j] = '-';
				a[1][1] = '*';
				a[n][m] = '*';
				for(int i = 1;i <= n;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<a[i][j];
					std::cout<<'\n';
				}
			}else
			{
				std::cout<<"No"<<'\n';
				continue;
		    }
		    continue;
		}
		
		if(k == 11)
		{
			if(n >= 2 && m >= 4 || n >= 4 && m >= 2)
			{
				std::cout<<"Yes"<<'\n';
				if(n >= 2 && m >= 4)
				{
					for(int i = 1;i <= n;i++)
					for(int j = 1;j <= m;j++) a[i][j] = '-';
					a[1][2] = '*',a[2][1] = '*',a[1][4] = '*';
					for(int i = 1;i <= n;i++)
					{
						for(int j = 1;j <= m;j++) std::cout<<a[i][j];
						std::cout<<'\n';
					}
				}else
				{
				    for(int i = 1;i <= n;i++)
					for(int j = 1;j <= m;j++) a[i][j] = '-';
					a[1][2] = '*',a[2][1] = '*',a[4][1] = '*';
					for(int i = 1;i <= n;i++)
					{
						for(int j = 1;j <= m;j++) std::cout<<a[i][j];
						std::cout<<'\n';
					}	
				}
			}else
			if(n == 3 && m == 3)
			{
				std::cout<<"Yes"<<'\n';
				for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) a[i][j] = '-';
				a[1][1] = '*';
				a[3][2] = '*';
				for(int i = 1;i <= n;i++)
				{
					for(int j = 1;j <= m;j++) std::cout<<a[i][j];
					std::cout<<'\n';
				}
			}
			else
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			continue;
		}
		
		if(k == 13)
		{
			if(n >= 3 && m >= 3)
			{
				std::cout<<"Yes"<<'\n';
			    for(int i = 1;i <= n;i++)
				for(int j = 1;j <= m;j++) a[i][j] = '-';
				a[1][3] = '*';
				a[3][1] = '*';
				for(int i = 1;i <= n;i++)
				{
				    for(int j = 1;j <= m;j++) std::cout<<a[i][j];
					std::cout<<'\n';	
				}	
			}else
			{
				std::cout<<"No"<<'\n';
				continue;
			}
			continue;
		}
	}
	return QAQ;
}

     OK辣,那么这道题目就被秒了~

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

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

相关文章

Javaweb项目-调用接口-如何在服务器端跳转网页后显示并弹出对话框代码

Webapp 项目中在java包下新建一个服务端类 使用JOptionPane框架组件 调用showMessageDialog的方法实现 四个参数null,"这是一个信息对话框","信息",JOptionPane.INFORMATION_MESSAGE 还有确认对话框的代码showConfirmDialog package servlet;import java…

k9s 是什么?有什么功能?

目录 k9s 是什么&#xff1f; 有什么功能&#xff1f; 手动安装 K9s&#xff08;Windwos&#xff09; 将 k9s.exe 添加到系统 PATH 启动 K9s k9s 是什么&#xff1f; K9s 是一个命令行工具&#xff0c;用于通过一个图形化的终端界面&#xff08;类似于图形化用户界面但在命…

【Linux】常用的命令

文章目录 lsls -l / touchcdpwdcatechovim打开文件编辑内容保存退出 mkdirrmmvcpmangreppsnetstat总结 &#xff1a; ls ls > list 列出当前目录下都有哪些内容&#xff08;文件/目录&#xff09; 直接输入 ls&#xff0c;是查看当前目录的情况&#xff1b;输入 ls/ 就是看…

检查你的防病毒软件是否可以阻止这 5 个测试恶意软件文件

从网络安全专家到你&#xff0c;每个人都知道你应该使用防病毒软件来保护你的电脑免受黑客、病毒和其他类型的网络威胁。 但即使你这些年来一直在努力使用防病毒程序&#xff0c;你怎么知道它真的有效呢&#xff1f; 安全专家已经想到了这一点&#xff0c;并创建了几种类型的…

TMS320F28335芯片及使用介绍

1、简介 CPU性能的好坏不仅取决于主频大小,还需要看其整体架构集成性能、运算能力与指令体系。TMS320C2000系列DSP集微控制器和高性能 DSP 的特点于一身,具有强大的控制和信号处理能力,能够实现复杂的控制算法。TMS320C2000 系列DSP 片上整合了Flash存储器、快速的AD转换器…

基于微信小程序+Java+SSM+Vue+MySQL的付费自习室预订管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSSMVueMySQL的付费自习室预订管理系统【…

【CMake编译报错小复盘】CMAKE_CUDA_ARCHITECTURES,CMake version,GCC version问题

今天在写大模型量化推理框架时遇到了一些编译上的错误&#xff0c;简单复盘一下问题和解决方案&#xff1a; 问题1&#xff1a;CMAKE_CUDA_ARCHITECTURES 报错信息&#xff1a; CMake Error: CMAKE_CUDA_ARCHITECTURES must be non-empty if set cmake和cuda相关的报错通常都…

linux进程间通信——进程间通信概念、最基本通信——管道文件

前言&#xff1a; 本节内容将要讲解进程间通信。 之前我们说过进程之间是相互独立的&#xff0c; 但是&#xff0c;相互独立并不代表不能进行数据的输送。就好比我和你是相互独立的&#xff0c; 但是我们可以成为朋友&#xff0c; 可以互赠礼物。 而我们一般而言的&#xff0c;…

【C语言】归并排序递归和非递归——动图演示

目录 一、归并排序思想1.1 基本思想1.2 大体思路 二、实现归并排序&#xff08;递归&#xff09;三、实现归并排序&#xff08;非递归&#xff09;3.1 实现思路&#xff1a;3.2 越界处理3.3 时间复杂度和空间复杂度 总结 一、归并排序思想 1.1 基本思想 归并排序&#xff08;M…

RTMP和WebRTC使用场景有哪些差别?

省流版先说结论 直播领域&#xff0c;RTMP和WebRTC各有优势。如果直播场景对延迟有一定要求&#xff0c;但更注重稳定性和兼容性&#xff0c;那么RTMP可能是一个更好的选择。如果直播场景需要极低的延迟&#xff0c;并且用户主要在浏览器环境下进行观看和互动&#xff0c;那么…

Leangoo敏捷工具在缺陷跟踪(BUG)管理中的高效应用

在开发过程中&#xff0c;缺陷&#xff08;BUG&#xff09;管理一直是项目管理中的一个关键环节。及时发现并修复BUG&#xff0c;不仅能够提高产品质量&#xff0c;还能有效提升团队的工作效率和用户满意度。 在敏捷开发中&#xff0c;快速迭代和频繁交付的特点使得缺陷管理的…

Servlet的特性(一)

Servlet的主要用途&#xff1a; 接受、处理来自浏览器端(BS架构中的B端)的请求和用户输入 响应来自数据库或者服务端(BS架构中的S端)产生的数据到浏览器端&#xff0c;动态构建网页。 手动实现Servlet小程序 实现步骤 自定义一个类型&#xff0c;实现Servlet接口或者继承Ht…

Spring Boot 集成 Redisson 实现消息队列

包含组件内容 RedisQueue&#xff1a;消息队列监听标识RedisQueueInit&#xff1a;Redis队列监听器RedisQueueListener&#xff1a;Redis消息队列监听实现RedisQueueService&#xff1a;Redis消息队列服务工具 代码实现 RedisQueue import java.lang.annotation.ElementTyp…

GD32E230 RTC报警中断功能使用

GD32E230 RTC报警中断使用 GD32E230 RTC时钟源有3个&#xff0c;一个是内部RC振动器产生的40KHz作为时钟源&#xff0c;或者是有外部32768Hz晶振.,或者外部高速时钟晶振分频作为时钟源。 &#x1f516;个人认为最难理解难点的就是有关RTC时钟异步预分频和同步预分频的计算。在对…

C++第二节入门 - 缺省参数和函数重载

一、缺省参数 1、概念 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。 在调用该函数的时候&#xff0c;如果没有指定实参则采用该形参的缺省值&#xff0c;否则使用指定的实参&#xff01; #include<iostream> using namespace std;void Func(int a 0) {c…

2024 水博会,国信华源登场,数智创新助力水利高质量发展

9月4日-6日&#xff0c;由中国水利学会和中国水利工程协会共同主办的2024中国水博览会暨第十九届中国&#xff08;国际&#xff09;水务创新技术交流会在重庆国际博览中心召开。 本次水博会以“展水利前沿新技术 览新质生产力场景”为主题&#xff0c;国信华源携最新智能监测预…

【佳学基因检测】如何升级一个不再维护的软件包中的PHP代码?

如何升级一个不再维护的软件包中的PHP代码&#xff1f; 为什么要升级一个不再维护但是仍在使用的软件包中的PHP代码&#xff1f; 升级一个不再维护但仍在使用的软件包中的 PHP 代码是一个复杂但重要的过程。虽然这些软件包可能已经不再活跃地维护或更新&#xff0c;但升级其代…

通信工程学习:什么是ATM异步转移模式

ATM&#xff1a;异步转移模式 ATM&#xff1a;Asynchronous Transfer Mode&#xff08;异步转移模式&#xff09;是一种先进的通信技术&#xff0c;它采用固定长度的信元&#xff08;Cell&#xff09;作为信息传输、复用、交换及处理的基本单位&#xff0c;并通过异步时分复用的…

挖矿木马-Linux

目录 介绍步骤 介绍 1、挖矿木马靶机中切换至root用户执行/root目录下的start.sh和attack.sh 2、题目服务器中包含两个应用场景&#xff0c;redis服务和hpMyAdmin服务&#xff0c;黑客分别通过两场景进行入侵&#xff0c;入侵与后续利用线路路如下&#xff1a; redis服务&…

Tomcat Request Cookie 丢失问题

优质博文&#xff1a;IT-BLOG-CN 一、问题描述 生产环境偶尔(涉及到多线程处理)出现"前端传递Cookie为空"的告警&#xff0c;导致前端请求丢失&#xff0c;出现请求失败问题。告警内容如下 前端传递Cookie为空 告警内容&#xff1a;服务端获取request Cookie为空&…