社区讨论

求证明 P15519 的理论

学术版参与者 3已保存回复 7

讨论操作

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

当前回复
6 条
当前快照
1 份
快照标识符
@mm765pi4
此快照首次捕获于
2026/03/01 11:07
上周
此快照最后确认于
2026/03/03 18:35
5 天前
查看原帖
我在做《P15519 [CCC 2016 J2] Magic Squares》,发现了一个奇怪的特性,先看题目。
题目描述
魔方阵是一种数字方阵,其有趣的特性在于:每一列和每一行的数字之和均相等。
给定一个 4×44 \times 4 的数字方阵,判断它是否为魔方阵。
输出应为 magic(若输入是魔方阵)或 not magic(若输入不是魔方阵)。
但是我一开始交上了这个代码:
CPP
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int a[5][5];
    for(int i=1;i<=4;i++)
    {
        for(int j=1;j<=4;j++)
        {
            cin>>a[i][j];
        }
    }
//__________________________________________
    int sum=a[1][1]+a[1][2]+a[1][3]+a[1][4];
//__________________________________________
    for(int i=1;i<=4;i++)
    {
        int l=a[i][1]+a[i][2]+a[i][3]+a[i][4];
        if(sum!=l)
        {
            cout<<"not magic";
            return 0;
        }
        else
        {
            sum=l;
        }
    }
//_____________________________________
    sum=a[1][1]+a[2][1]+a[3][1]+a[4][1];
//_____________________________________
    for(int i=1;i<=4;i++)
    {
        int l=a[1][i]+a[2][i]+a[3][i]+a[4][i];
        if(sum!=l)
        {
            cout<<"not magic";
            return 0;
        }
        else
        {
            sum=l;
        }
    }
    cout<<"magic";
    return 0;
}
AC 了,但是我重新读题,就发现了问题。在我代码里注释的部分可以看出,我一开始理解的题目是:每一行之和相等,每一列之和相等,但是不保证行之和与列之和相等。
虽然理解错了题目,但是居然 AC 了。我一开始以为是数据太水了。所以为了打败数据,我让 Deep 帮我以我的思路生成一个数据,保证每一行之和相等,每一列之和相等,行之和与列之和一定不相等
结果呢?Deep 生成了一堆样例,但是没有一个符合要求,告诉我 “满足前两个条件的矩阵不可能满足第三个条件” ,这就非常 Amazing 了。
但是我是一个蒟蒻,我并不能证明这个结论。
结论:一个 4×44 \times 4 的数字方阵,如果每一行之和相等,那么若想让每一列之和相等,则每一行之和一定等于每一列之和。
如果有大佬可以证明或者将结论扩展,可以私信或评论,然后顺手拿一个洛谷尔奖。如果无法证明或者能提出反例,说明数据太水了。

回复

7 条回复,欢迎继续交流。

正在加载回复...