QYU10744 [ICPC-2025-I WHN] 宾果 III 学习笔记

QYU10744 [ICPC-2025-I WHN] 宾果 III 学习笔记

QingyuOJ Link

题意简述

讨论一个由 \(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;
}
posted @ 2025-05-03 10:15  矞龙OrinLoong  阅读(21)  评论(0)    收藏  举报