当前位置: 首页 > news >正文

洛谷 NOIP 2023 模拟赛-汪了个汪-题解

简要题意

棋盘上有 n n n 行,第 i i i 行有 i i i 个格子。你要在格子填 1 ∼ n 1\sim n 1n,满足:

  • 每行第一个数互不相同
  • 所有在行上相邻的两个数所组成的无序对互不相同
  • 每行的数互不相同

n ≤ 4000 n\le4000 n4000

题解

容易发现棋盘上的无序对与总的无序对数量是相同的,也就是说,要全部填满。可以考虑把它们分类,然后再按规律放数。

我们发现,无序对中两数差为 1 1 1 n − 1 n-1 n1 个,差为 2 2 2 n − 2 n-2 n2 个, … \dots ,差为 n − 1 n-1 n1 1 1 1 个,看上去很巧,如果能把它们按行归类,就好了。但是显然 2 , 5 , 3 , 6 , … 2,5,3,6,\dots 2,5,3,6, 是放不进的。

考虑能否这样,第 i i i 行有差为 1 ∼ i − 1 1\sim i-1 1i1 的无序对各 1 1 1 个。发现如果这样构造: x , x + 1 , x − 1 , x + 2 , x 2 , … x,x+1,x-1,x+2,x_2,\dots x,x+1,x1,x+2,x2,,是符合条件的。于是就做完了。

#include<bits/stdc++.h>
using namespace std;
int n,t;
vector<int> v[4001];
bool cmp(vector<int> v1,vector<int> v2)
{return v1.size()<v2.size();
}
int main()
{cin>>n>>t;for(int i=1;i<=n;i++){int x=0,now=i,y=1;while(now>0&&now<=n){v[i].push_back(now);now=now+(x&1?1:-1)*y;y++;x++;}}sort(v+1,v+1+n,cmp);for(int i=1;i<=n;i++){for(auto j:v[i]){printf("%d ",j);}puts("");}
}
http://www.lryc.cn/news/227633.html

相关文章:

  • 洛谷 NOIP 2023 模拟赛 P9836 种树
  • 链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)
  • AD教程 (十三)常见CHIP封装的创建
  • 从0到1实现一个前端监控系统(附源码)
  • 第7章-使用统计方法进行变量有效性测试-7.2-方差分析
  • 【MongoDB】索引 – 文本索引(用权重控制搜索结果)
  • Git 入门使用
  • 如何写好接口自动化测试脚本
  • openEuler编译安装nmon性能监控工具及可视化分析工具
  • 96 前缀树Trie
  • “第六十六天”
  • MYSQL5.7和MYSQL8配置主从
  • springboot苍穹外卖实战:九、小程序微信登录代码开发+商品浏览
  • 【MySQL系列】 第二章 · SQL(下)
  • SpringBoot_01
  • 【OS】AUTOSAR架构下多核通信
  • 从Docker Hub获取镜像和创建容器
  • 江西开放大学引领学习新时代:电大搜题助力学子迈向成功
  • 入门指南:Docker的基本命令
  • nvdiffrast的MeshRenderer
  • APISIX源码安装问题解决
  • 基于SSM和vue的在线购物系统
  • 力扣100题——子串
  • 自然语言处理中的文本聚类:揭示模式和见解
  • C/C++内存管理——“C++”
  • jsp小知识
  • Flutter:改变手机状态栏颜色,与appBar状态颜色抱持一致
  • 深入分析:一体化运维监控在金融行业的关键作用
  • 物联网AI MicroPython学习之语法 network网络配置模块
  • java根据前、中序遍历结果重新生成二叉树