HDU

来源:互联网 发布:祥南行书体 mac 编辑:程序博客网 时间:2024/06/01 20:56

https://cn.vjudge.net/contest/165541#problem/H
开始知道是构造。但是因为没有写过构造题就没有办法了。
代码超级短。但是网上的数学证明就很长很长。。
附赠连接。。。http://blog.csdn.net/spark_007/article/details/9017533
经过数学证明:
最大的那一行排列一定是 m,m,m-1m-1,m-2,m-2……
并且n一定是大于3的奇数。
如果比赛中遇到了,就大胆的写吧。。
给定n组 1-m个数。
构成m*n矩阵,每一列包含 1 2 3 …m,
并且每一行相邻的差不得大于1。

#include <stdio.h>#include <string.h>#include <iostream>using namespace std;int main () {    int m, n;    while (scanf("%d%d", &m, &n) == 2) {        int sum=0;        for(int i=1;i<=n-1;i+=2)        {  sum+=m*2;           m--;        }        sum+=m;        cout<<sum<<endl;    }    return 0;}
原创粉丝点击