2023NOIP A层联测25-构造

2023-11-07 04:44
文章标签 25 构造 联测 2023noip

本文主要是介绍2023NOIP A层联测25-构造,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这里连续的是指同一行、同一列或者同一45°斜线,方向任意(共 8 个方向)。

n ≤ 2222 n\le2222 n2222


先给出一种最大的构造方案

40 40
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxr
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxx
ryxyryxyryxyryxyryxyryxyryxyryxyryxyryxy

2223 2223 2223 个。

说一下构造的思路,首先先考虑最大的情况,你可能能想到把 40 40 40ryx 堆在三列,然后复制这一堆到其他的三列。把 ryx 堆在一起是较优的,有横斜两种情况。如果按上面这么做,总数是 13 × ( 40 + 38 × 2 ) = 1508 13\times(40+38\times2)=1508 13×(40+38×2)=1508,可以拿到 60pts。

然后发现 ryxryx 可以变成 ryxyr,就省出来了一列,就这样 ryxyryxyr 重复下去,总数是 19 × ( 40 + 38 × 2 ) = 2204 19\times(40+38\times2)=2204 19×(40+38×2)=2204,可以拿到 80pts。

然后你发现第 40 40 40 列是空出来的,这里也能放东西,只需 ryxyryxyr... 放下去即可,总数就是 2223 2223 2223 个,就 AC 了。

对于精确为 n n n 的做法,可以先放整列,然后对于散的 n n n 就模拟一个一个放就可以了。可以看代码实现。

#include<bits/stdc++.h>
using namespace std;
int n;
char a[41][41];
int main()
{freopen("ryx.in","r",stdin);freopen("ryx.out","w",stdout);cin>>n;int czn=n/116;for(int i=1;i<=40;i++) a[i][1]='r';for(int i=1;i<=czn;i++){for(int j=1;j<=40;j++){a[j][i*2]='y';a[j][i*2+1]=i&1?'x':'r';}}int x=2+czn*2;if(n<=2204){n-=czn*116;if(!n) goto a;if(n==1){a[1][40]='r',a[2][40]='y',a[3][40]='x';goto a;}if(n==2){a[1][40]='r',a[2][40]='y',a[3][40]='x',a[4][40]='y',a[5][40]='r';goto a;}a[1][x]='y',a[1][x+1]=(czn&1?'r':'x');a[2][x]='y',a[2][x+1]=(czn&1?'r':'x');a[3][x]='r';n-=3;int y=3;while(n){if(n==1){a[1][40]='r',a[2][40]='y',a[3][40]='x';goto a;}else if(n==2){a[1][40]='r',a[2][40]='y',a[3][40]='x',a[4][40]='y',a[5][40]='r';goto a;}else a[y][x]='y',a[y][x+1]=(czn&1?'r':'x'),n-=3,y++;a[y][x]='r';}}else{n-=2204;int x=2,cnt=1;a[x][40]='r';while(n--){a[x+1][40]='y';a[x+2][40]=cnt&1?'x':'r';x+=2;cnt++;}}a:for(int i=1;i<=40;i++) for(int j=1;j<=40;j++) if(!a[i][j]) a[i][j]='y';cout<<"40 40\n";for(int i=1;i<=40;i++){for(int j=1;j<=40;j++) cout<<a[i][j];cout<<'\n';}
}

这篇关于2023NOIP A层联测25-构造的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361327

相关文章

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系

CF #278 (Div. 2) B.(暴力枚举+推导公式+数学构造)

B. Candy Boxes time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/488/problem/B There

MemSQL Start[c]UP 2.0 - Round 1A(构造)

题目链接:http://codeforces.com/problemset/problem/452/A 解题思路: 打个表暴力查找匹配。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <strin

Codeforces Round #281 (Div. 2)A(构造+暴力模拟)

题目链接:http://codeforces.com/problemset/problem/493/A 解题思路: 暴力的判断,分三种情况去判断即可。注意如果之前已经被罚下场后,那么在后面的罚下情况不应该算在输出结果内。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <co

Codeforces Round #233 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/399/problem/A 解题思路: 构造出来即可,考虑p-k和p+k两个边界分别于1和n作比较,对左右符号特殊处理。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include

Codeforces Round #247 (Div. 2)A(构造)

题目链接:http://codeforces.com/contest/431/problem/A 解题思路: 构造出来即可。 完整代码: #include <algorithm>#include <iostream>#include <cstring>#include <complex>#include <cstdio>#include <string>#inc