zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    git revert和git reset的区别
    git merge 和 git rebase 小结
    Markdown——入门指南
    使用Git Wiki 管理文档时,文档编写的基本用法
    mysql 列 默认添加 dedault null ??
    redis aof文件过大问题
    redis源码分析——aofrewrite
    改变文章的字号大小
    推荐大家使用的CSS书写规范及顺序
    inline-block 前世今生
  • 原文地址:https://www.cnblogs.com/CheeseIce/p/9691429.html
Copyright © 2011-2022 走看看