专栏文章

题解:P14247 [CCPC 2024 Shandong I] 矩阵

P14247题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@minksjgp
此快照首次捕获于
2025/12/02 04:02
3 个月前
此快照最后确认于
2025/12/02 04:02
3 个月前
查看原文

题目大意

构造一个 n×nn × n 的矩阵,元素范围从 112n2n。要求 1 到 2n2n 每种元素至少出现一次,且恰有一个子矩阵的四角元素互不 相同。
n50n ≤ 50
  • 考虑这种矩阵
PYTHON
1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 6 7 8 9 10
5 6 7 8 11 12
可以发现这种矩阵一定符合要求
  • (n2)(n − 2) 行,第 ii 行全填 ii,这样子矩阵的上下边就只能选择最后两行,否则至少两个角会相同。
  • 最后两行的前 (n2)(n − 2) 列,第 ii 列全填 (n2)+i(n − 2) + i,这样子矩阵的左右边界就只能选择最后两列,否则至少两个角会相同。
  • 右下角的 2×22 × 2 子矩阵填剩下四个不同的数即可。

ACcode

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,t,a[100005];
signed main()
{
	t=1;
	while(t--)
	{
		cin>>n;
		cout<<"Yes\n";
		for(int i=1;i<=n-2;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cout<<i<<" ";
			}
			cout<<endl;
		}
		for(int i=1;i<=n-2;i++)
			cout<<i+n-2<<" ";
		for(int i=1;i<=2;i++)
			cout<<i+n-2+n-2<<" ";
		cout<<endl;
		for(int i=1;i<=n-2;i++)
			cout<<i+n-2<<" ";
		for(int i=1;i<=2;i++)
			cout<<i+2+n-2+n-2<<" ";
		cout<<endl;
	}
	return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...