QYU10744 [ICPC-2025-I WHN] 宾果 III 学习笔记
QYU10744 [ICPC-2025-I WHN] 宾果 III 学习笔记
题意简述
讨论一个由 \(n\times n\) 个数构成,所有 \(a_{i,j}\) 恰好包含 \([1,n^2]\) 中的所有数的方阵 \(A\)。称 \(a_{i,j}\) 是“宾果数”当且仅当其为其所在一行或一列的最大值。给定 \(n,k\),试构造出一个 \(A\) 满足 \(k\) 为其最小宾果数,或报告无解。
本题多测,共 \(T\) 组数据。\(T,n\le 50,k\le n^2\)。
做法解析
构造题第一步:判断上下界。显然当 \(k\in [n,n^2-n+1]\) 时才可能有解,证明显然。
构造题第二步:尝试证明在上下界内的所有目标都可被构造。为了推出通解我们先来考虑下极端情况,比如 \(k=n^2-n+1\) 时。我们可以想到这样一个构造。
\[\begin{bmatrix}
n^2-n+1&1&2&\cdots&n-1\\
(n-1)+1&n^2-n+2&(n-1)+2&\cdots&2(n-1)\\
2(n-1)+1&2(n-1)+2&n^2-n+3&\cdots&3(n-1)\\
\cdots&\cdots&\cdots&\cdots&\cdots\\
(n-1)^2+1&(n-1)^2+2&(n-1)^2+3&\cdots&n^2-n+n\\
\end{bmatrix}
\]
然后我们惊奇的发现,对于任意在上下界间的 \(k\) 我们把 \(k\) 和 \(n^2-n+1\) 位置交换就是合法的构造了。
正确性?此时除了第一行和第一列,剩余所有行列的最大值都在 \(n^2-n+x,x\in[2,n]\) 的掌控中;而第一行剩余的数都小于 \(n\),所以 \(k\) 一定是第一行的最大值,所以 \(k\) 一定是宾果数,至于第一列,最大值是 \(k\) 时显然没问题,如果其最大值 \(y\neq k\),那么一定有 \(y>k\),此时 \(y\) 一定不是最小的宾果数(因为有 \(k\) 在)。证毕。
代码实现
#include <bits/stdc++.h>
using namespace std;
using namespace obasic;
const int MaxN=55;
int N,K,A[MaxN][MaxN],ulc;
void mian(){
readis(N,K),ulc=N*N-N+1;
if(K<N||K>ulc){puts("No");return;}
puts("Yes");
for(int i=1;i<=N;i++,puts("")){
for(int j=1,tmp;j<=N;j++){
if(i==1&&j==1){writip(K);continue;}
if(i==j){writip(N*N-N+i);continue;}
tmp=(i-1)*(N-1)+j-(j>i),writip(tmp==K?ulc:tmp);
}
}
}
int Tcn;
int main(){
readi(Tcn);
while(Tcn--)mian();
return 0;
}
浙公网安备 33010602011771号