NOIP2023模拟12联测33 构造

题目大意

给定一个非负整数 n n n,请构造出一个不超过 40 × 40 40\times 40 40×40的矩阵,每个位置填 r r r y y y x x x三者之一,使得连续的三个格子按顺序构成字符串 r y x ryx ryx恰好 n n n个。

这里连续的是指同一行、同一列或者同一 4 5 ∘ 45^{\circ} 45度斜线,方向任意(共 8 8 8个方向)。

0 ≤ n ≤ 2222 0\leq n\leq 2222 0n2222


题解

我们先考虑如何构造能使得字符串 r y x ryx ryx能达到 2222 2222 2222个。对于一个 40 × 40 40\times 40 40×40的矩阵,我们可以先每一行放满 r y x y ryxy ryxy

r y x y r y x y ⋯ r y x y r y x y ⋯ r y x y r y x y ⋯ r y x y r y x y ⋯ ryxyryxy\cdots \\ ryxyryxy\cdots \\ ryxyryxy\cdots \\ ryxyryxy\cdots ryxyryxyryxyryxyryxyryxyryxyryxy

这样每一行按从前往后的顺序有 10 10 10个字符串 r y x ryx ryx,从后往前的顺序有 9 9 9个字符串 r y x ryx ryx。每列 r r r往右上能有 38 38 38个字符串 r y x ryx ryx,往右下能有 38 38 38个字符串 r y x ryx ryx。除了第一列 r r r,每列 r r r往左上能有 38 38 38个字符串 r y x ryx ryx,往左下能有 38 38 38个字符串 r y x ryx ryx。那么总共有 ( 10 + 9 ) × 40 + ( 38 + 38 ) × 10 + ( 38 + 38 ) × 9 = 2204 (10+9)\times 40+(38+38)\times 10+(38+38)\times 9=2204 (10+9)×40+(38+38)×10+(38+38)×9=2204个字符串 r y x ryx ryx,还差 18 18 18个。

我们发现,最后一列的 y y y是没有用到的,那么我们把这一列全部改为 r y x y ryxy ryxy,那么从上往下有 10 10 10个字符串 r y x ryx ryx,从下往上有 9 9 9个字符串 r y x ryx ryx,那么这样的话,总共就有 2204 + 10 + 9 = 2223 2204+10+9=2223 2204+10+9=2223个字符串 r y x ryx ryx,我们用这个方法能够取到题目中 n n n的最大值。

令矩形的长和宽为 k = 40 k=40 k=40,我们可以先打一个能够 O ( k 2 ) O(k^2) O(k2)判断矩形中字符串 r y x ryx ryx的个数的函数 g t ( ) gt() gt()。先将整个矩形的每个位置视为空的,然后依次在每一行中从第一个为空的位置开始放入一行 r y x y ryxy ryxy。如果每一行都放完一次之后 g t ( ) ≤ n gt()\leq n gt()n,则继续从第一行开始在每一行中从第一个为空的位置开始放入一行 r y x y ryxy ryxy,直到 g t ( ) > n gt()>n gt()>n,就把当前放的 r y x y ryxy ryxy删去。此时, g t ( ) gt() gt()不一定等于 n n n,所以我们还要用最后一列来进行调整。同样地,从上往下不断放入 r y x y ryxy ryxy,直到 g t ( ) > n gt()>n gt()>n就将当前放入的 r y x y ryxy ryxy删去。注意每次放入一个 r y x y ryxy ryxy最多会使 g t ( ) gt() gt()增加 2 2 2,那么最后 g t ( ) gt() gt()要么等于 n n n,要么等于 n − 1 n-1 n1。如果等于 n − 1 n-1 n1,就在最后一列的末尾从下往上放入 r y x ryx ryx。因为 n ≤ 2222 < 2223 n\leq 2222<2223 n2222<2223,所以 r y x y ryxy ryxy不会放到最后一列的最后三个位置,那么最后放的 r y x ryx ryx对之前放的字母不会有任何影响。

对于为空的部分,我们全部填上 y y y。因为左边部分结尾的都是 y y y,而右边只有一列不全为 y y y,所以将为空的部分填上 y y y不会增加 r y x ryx ryx的数量。

这样就可以构造出满足题意的矩阵了。

时间复杂度为 O ( k 4 ) O(k^4) O(k4)

code

#include<bits/stdc++.h>
using namespace std;
int n,fl;
char a[45][45];
int gt(){int re=0;for(int i=1;i<=40;i++){for(int j=1;j<=40;j++){if(a[i][j]=='r'){if(i-2>=1){if(a[i-2][j]=='x'&&a[i-1][j]=='y') ++re;}if(i+2<=40){if(a[i+2][j]=='x'&&a[i+1][j]=='y') ++re;}if(j-2>=1){if(a[i][j-2]=='x'&&a[i][j-1]=='y') ++re;}if(j+2<=40){if(a[i][j+2]=='x'&&a[i][j+1]=='y') ++re;}if(i-2>=1&&j-2>=1){if(a[i-2][j-2]=='x'&&a[i-1][j-1]=='y') ++re;}if(i-2>=1&&j+2<=40){if(a[i-2][j+2]=='x'&&a[i-1][j+1]=='y') ++re;}if(i+2<=40&&j-2>=1){if(a[i+2][j-2]=='x'&&a[i+1][j-1]=='y') ++re;}if(i+2<=40&&j+2<=40){if(a[i+2][j+2]=='x'&&a[i+1][j+1]=='y') ++re;}}}}return re;
}
int main()
{
//	freopen("ryx.in","r",stdin);
//	freopen("ryx.out","w",stdout);scanf("%d",&n);for(int i=1;i<=40;i++){for(int j=1;j<=40;j++){a[i][j]='y';}}for(int j=1;j<=40;j+=4){fl=0;for(int i=1;i<=40;i++){a[i][j]='r';a[i][j+1]='y';a[i][j+2]='x';a[i][j+3]='y';if(gt()>n){a[i][j]='y';a[i][j+1]='y';a[i][j+2]='y';a[i][j+3]='y';fl=1;break;}}if(fl) break;}for(int i=1;i<=40;i+=4){a[i][40]='r';a[i+1][40]='y';a[i+2][40]='x';a[i+3][40]='y';if(gt()>n){a[i][40]='y';a[i+1][40]='y';a[i+2][40]='y';a[i+3][40]='y';break;}}n-=gt();if(n){a[40][40]='r';a[39][40]='y';a[38][40]='x';}printf("40 40\n");for(int i=1;i<=40;i++){for(int j=1;j<=40;j++){printf("%c",a[i][j]);}printf("\n");}return 0;
}

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

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

相关文章

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

猜数字--

猜数字 文章目录 前言一、题目描述 二、解题 程序运行代码 三、举一反三题目描述 解题 程序运行代码 猜数字游戏 前言 本系列为循环结构编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 当输入数字为123时&#xff0c;输出yes;否则输出error 二、解题 程序…

3.8 Android eBPF HelloWorld调试(二)

写在前面 我们开发eBPF程序的初衷就是再不改动内核的情况下,将内核监控数据传递给到用户态;像应用进程开发一样开发内核监控程序。 Android开机的时候eBPF程序被加载器加载到内核中,但此时它并没有被附加到内核函数上去,也就是ebpf程序并不会执行,我们可以理解为,它仅仅被…

数据结构--前缀树(Trie)

1. 简介 前缀树是一种数据结构&#xff0c;常用来字符搜索。 2. 实现 包含的操作主要是: 加入串搜索串 代码实现&#xff0c;直接用leetcode_208的题解咯。 代码 class Trie { public:Trie():isEnd(false){for ( int i 0; i < 26;i)child[i] nullptr;}~Trie() {fo…

Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?

说说webpack中常见的Plugin&#xff1f;解决了什么问题&#xff1f;- 题目详情 - 前端面试题宝典 1、plugin 的作用 Plugin 是一种计算机应用程序&#xff0c;它和主应用程序互相交互&#xff0c;以提供特定的功能。 是一种遵循一定规范的应用程序接口编写出来的程序&#…

CSDN每日一题学习训练——Java版(两数相加、二叉树的锯齿形层序遍历、解数独)

版本说明 当前版本号[20231106]。 版本修改说明20231106初版 目录 文章目录 版本说明目录两数相加题目解题思路代码思路补充说明参考代码 二叉树的锯齿形层序遍历题目解题思路代码思路参考代码 解数独题目解题思路代码思路补充说明参考代码 两数相加 题目 给你两个 非空 的…

蓝桥杯官网填空题(图书排列)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 将编号为 1 ~ 10 的 10 本书排放在书架上&#xff0c;要求编号相邻的书不能放在相邻的位置。 请计算一共有多少种不同的排列方案。 运行限制 public class Main…

Java序列化和Json格式的转化

Java序列化和JSON格式的转换都是在不同格式之间实现对象的传输&#xff0c;并在数据节点之间方便地进行信息交换&#xff0c;其中主要区别在于它们的工作原理和应用场景。 Java序列化是将 Java 对象转换为字节流&#xff08;二进制格式的数据&#xff09;&#xff0c;以便在网…

动态IP和静态IP哪个安全,该怎么选择

随着互联网的普及&#xff0c;越来越多的人开始关注网络安全问题。其中&#xff0c;IP地址作为网络通信中的重要组成部分&#xff0c;也成为了人们关注的焦点。 在IP地址中&#xff0c;动态IP和静态IP是两种不同的分配方式&#xff0c;它们各自具有不同的特点&#xff0c;那么…

如何在 TFRecord 文件上训练 Keras 模型实现黑色素瘤分类器

简介 + 设置 TFRecords 存储一系列二进制记录,线性读取。它们是存储数据的有用格式,因为它们可以有效地读取。在此处了解有关 TFRecords 的更多信息 。 我们将探索如何轻松加载黑色素瘤分类器的 TFRecords。 import tensorflow as tf from functools import partial import…

论文阅读—— CEASC(cvpr2023)

arxiv&#xff1a;https://arxiv.org/abs/2303.14488 github&#xff1a;https://github.com/Cuogeihong/CEASC 为了进一步减轻SC中的信息损失&#xff0c;使训练过程更加稳定&#xff0c;我们在训练过程中除了稀疏卷积之外&#xff0c;还保持了正常的密集卷积&#xff0c;生成…

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Android---彻底掌握 Handler

Handler 现在几乎是 Android 面试的必问知识点&#xff0c;大多数 Adnroid 工程师都在项目中使用过 Handler。主要场景是子线程完成耗时操作的过程中&#xff0c;通过 Handler 向主线程发送消息 Message&#xff0c;用来刷新 UI 界面。 下面我们来了解 Handler 的发送消息和处…

docker相关知识

docker-compose https://www.runoob.com/docker/docker-compose.html Compose 使用的三个步骤&#xff1a; 使用 Dockerfile 定义应用程序的环境。 使用 docker-compose.yml 定义构成应用程序的服务&#xff0c;这样它们可以在隔离环境中一起运行。 最后&#xff0c;执行 …

吃透BGP,永远绕不开这些基础概述,看完再也不怕BGP了!

你们好&#xff0c;我的网工朋友。 总有人在私信里抱怨&#xff0c;BGP实在是太难了&#xff01; 一是这玩意儿本来就很复杂&#xff0c;需要处理大量的路由信息和复杂的算法&#xff1b;再一个是需要你有一定的实战经验才能深入理解运作。 虽然BGP确实有一定难度&#xff0c…

【漏洞复现】Metinfo6.0.0任意文件读取漏洞复现

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现代码审计漏洞点 1.5、深度利用EXP编写 1.6、漏洞挖掘1.7修复建议 1.1、漏洞描述 漏洞名称&#xff1a;MetInfo任意文件…

Node.js |(五)包管理工具 | 尚硅谷2023版Node.js零基础视频教程

学习视频&#xff1a;尚硅谷2023版Node.js零基础视频教程&#xff0c;nodejs新手到高手 文章目录 &#x1f4da;概念介绍&#x1f4da;npm&#x1f407;安装npm&#x1f407;基本使用&#x1f407;生产依赖与开发依赖&#x1f407;npm全局安装&#x1f407;npm安装指定包和删除…

【Spring Boot 源码学习】JedisConnectionConfiguration 详解

Spring Boot 源码学习系列 JedisConnectionConfiguration 详解 引言往期内容主要内容1. RedisConnectionFactory1.1 单机连接1.2 集群连接1.3 哨兵连接 2. JedisConnectionConfiguration2.1 RedisConnectionConfiguration2.2 导入自动配置2.3 相关注解介绍2.4 redisConnectionF…

linux文章导航栏

linux文章导航栏 问价解压缩大全Linux tar 备忘清单zip文件解压缩命令全 ubuntuubuntu18.04安装教程\搜狗输入法\网络配置教程Linux静态库和动态库 shellShell脚本命令

Linux内核分析(六)--处理器调度基本准则和实现介绍

目录 一、引言 二、进程调度的层次 ------>2.1、高级调度(作业调度) ------>2.2、中级调度(内存调度) ------>2.3、低级调度(进程调度) ------>2.4、三者的联系 三、调度的时机、切换与过程 ------>3.1、无法发送调度与切换的情况 ------>3.2、应该…