Newcoder 142 D.Another Distinct Values(构造)

探讨如何使用-1,0,1构造n×n矩阵,确保所有行和列的和各不相同,提出了解决方案并提供了代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

1,0,1−1,0,1构造一个n×nn×n矩阵,使得行和,列和这2n2n个数字不同

Input

第一行一整数TT表示用例组数,每组用例输入一整数n(1T,n200)

Output

如果无解则输出impossibleimpossible,否则输出possiblepossible以及一种方案

Sample Input

2
1
2

Sample Output

impossible
possible
1 0
1 -1

Solution

行列和范围为[n,n][−n,n]2n+12n+1种取值,那么行列和若合法则至少有nn个非负,假设合法方案的行列和分别为r1,...,rn,c1,...,cn,通过对行列的排序显然可以使得r1,...,rk0,c1,...,cnk0r1,...,rk≥0,c1,...,cn−k≥0,考虑两个式子

i=1n|ri|+i=1n|ci|i=nn|i|n=n2∑i=1n|ri|+∑i=1n|ci|≥∑i=−nn|i|−n=n2

i=1n|ri|+i=1n|ci|===i=1krii=k+1nri+i=1nkci+i=nk+1nciikaiji>kaij+jnkaiji>nkaij2i=1kj=1nkaij2i=k+1nj=nk+1naij4k(nk)∑i=1n|ri|+∑i=1n|ci|=∑i=1kri−∑i=k+1nri+∑i=1n−kci+∑i=n−k+1nci=∑i≤kaij−∑i>kaij+∑j≤n−kaij−∑i>n−kaij=2∑i=1k∑j=1n−kaij−2∑i=k+1n∑j=n−k+1naij≤4k(n−k)

两式比较有n24k(nk)n2≤4k(n−k),也即(n2k)20(n−2k)2≤0,该式成立当且仅当n=2kn=2k,故nn为奇数时无解,而当n为偶数时,可以将矩阵斜对角线上放置若干n=2n=2时的222⋅2方阵,其余的在斜对角线上面方的全部放11,下方的全部放1

Code

#include<cstdio>
using namespace std;
int T,n;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        if(n%2==0)
        {
            printf("possible\n");
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                {
                    int a;
                    if(i+j<=n)a=1;
                    else if(i+j==n+1)
                    {
                        if(i&1)a=0;
                        else a=1;
                    }
                    else a=-1;
                    printf("%d%c",a,j==n?'\n':' ');
                }
        }
        else printf("impossible\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值