1490 ACM 数学

Posted cheeseice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1490 ACM 数学相关的知识,希望对你有一定的参考价值。

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1490

题意:

给出n*n 的矩阵,选出不同行不同列的n个元素,并求和;

如果所有选法所产生的和相等,则输出 homogeneous 否则输出not homogeneous 。

解析:通过自己在图纸上画,可以知道,实际上n*n的矩阵,符合题意的只有n!种选法。

数学规律:

要使n*n时homogeneous,必须该矩阵中的每一个2*2矩阵都是homogeneous。

证明:显然,我们能发现在n!种方法中,每一种放法都可以由另一种放法 通过对角线移动而得(及交换两坐标的X Y的值),所以移动前后的值必须相等。必须要该矩阵中的每一个2*2矩阵都是homogeneous。

技术分享图片

及必须A1+A2==A3+A4

假设空处为a,b

技术分享图片

那么如果该矩阵中的每一个2*2矩阵都是homogeneous

及有:

  • A1+b==a+A4 
  • a+A2==b+A3

两式相加得:

A1+A2==A3+A4

如果

  • A1+b==a+A4 
  • a+A2==b+A3

中有一个不成立,就不对

 启发:

像这样的任意和全局型的问题,思考时可以从缩小规模的特殊情况开始考虑,如先令n=2,开始思考,从小到大;

code:

#include<cstdio>
#include<iostream>
using namespace std;

int n;
int a[1001][1001];
int t;
int main()
{
    int i,j;
    while(cin>>n&&n)
    {
        t=1;
        for(i=1;i<=n;++i)
            for(j=1;j<=n;++j)
                cin>>a[i][j];
        for(i=1;t&&i<n;i++)
            for(j=1;t&&j<n;j++)
                if(a[i][j]+a[i+1][j+1]!=a[i][j+1]+a[i+1][j])
                   { 
            t=0;
            break;
            }
        if(t)
            cout<<"homogeneous"<<endl;
        else
            cout<<"not homogeneous"<<endl;
    }
    return 0;
}

 

以上是关于1490 ACM 数学的主要内容,如果未能解决你的问题,请参考以下文章

语音合成基于matlab两端音频合成含Matlab源码 1490期

九度oj 题目1490:字符串链接

洛谷 P1490 解题报告

hihocoder1490 Tree Restoration 模拟

2021-2022-1 ACM集训队每周程序设计竞赛 - 问题 E: 数学!- 题解

2021-2022-1 ACM集训队每周程序设计竞赛 - 问题 D: 数学?- 题解