社区讨论
求证明 P15519 的理论
学术版参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mm765pi4
- 此快照首次捕获于
- 2026/03/01 11:07 上周
- 此快照最后确认于
- 2026/03/03 18:35 5 天前
我在做《P15519 [CCC 2016 J2] Magic Squares》,发现了一个奇怪的特性,先看题目。
题目描述
魔方阵是一种数字方阵,其有趣的特性在于:每一列和每一行的数字之和均相等。
给定一个 的数字方阵,判断它是否为魔方阵。
输出应为
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 了。
但是我是一个蒟蒻,我并不能证明这个结论。
结论:一个 的数字方阵,如果每一行之和相等,那么若想让每一列之和相等,则每一行之和一定等于每一列之和。
如果有大佬可以证明或者将结论扩展,可以私信或评论,然后顺手拿一个洛谷尔奖。如果无法证明或者能提出反例,说明数据太水了。
回复
共 7 条回复,欢迎继续交流。
正在加载回复...