洛谷 NOIP 2023 模拟赛 T2 汪了个汪
洛谷 NOIP 2023 模拟赛 T2 汪了个汪
考试建出正解图不知道怎么处理,题解区樱雪喵博客薄纱。
Ps:笔者语文爆炸,不建议阅读本文
思路
首先你会发现,一共有
按照题目要求,一个横向数对对应一个二元组。
你又发现(但是我没发现)刚好有
接着又有,第
刚好对应上!(这简直比巧克力还要巧)
那是不是把差为
你会发现
考虑一下,把这个金字塔转动一下:
如
变成这样:
图中的
旋转后图形的第一行有
也就是寻找一种构造方案,使得旋转过后的图中每一列的第一行红线相差 1,第二行相差 2,第 3 行相差 3……
那么有如下构造:
直接枚举每一个
例如
1 2
2 3 1 4
3 4 2 5 1 6
4 5 3 6 2 7 1
5 6 4 7 3
6 7 5
7
将序列长度排序,即为答案:
7
1 2
6 7 5
2 3 1 4
5 6 4 7 3
3 4 2 5 1 6
4 5 3 6 2 7 1
时间复杂度
CODE
#include<bits/stdc++.h>
using namespace std;
const int maxn=4005;
int n;
int a[maxn][maxn];
pair<int,int> p[maxn];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int x=i,t=i,ct=0,bj=-1,xz=0;
while(t<=n&&t>=1)
{
ct++;
a[i][ct]=t;
bj*=-1;
xz+=ct%2;
t=x+bj*xz;
}
p[i]=make_pair(ct,i);
}
sort(p+1,p+n+1);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++) printf("%d ",a[p[i].second][j]);
printf("\n");
}
}
后记
樱雪喵 ORZ
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现