Codeforces 1634 C. OKEA ——简单思维

This way

题意:

给你一个n*k的矩形,你要在每个格子里面填一个数,数的范围是[1,n*k]并且每个数只能用一次,并且对于任意的i,l,r:m e a n ( a [ i ] [ l : r ] ) mean(a[i][l:r])mean(a[i][l:r])是正整数。
问你是否可能,并且输出矩形。

题解:

既然平均值要是整数,那么任意两个连续的数的值之差必须是2的倍数,然后又要将[1,n*k]用掉,可以很容易地想到相差为2的等差数列是最优选择。那么
第一行是1,3,5,7…,x
第二行是2,4,6,8…,x+1
第三行是x+2,x+4,x+6…
这样子过去。
于是我们看到有一个很重要的条件是:行数需要是偶数,不是偶数的话,就比如第三行中的x+3就不见了。
那么n能否是奇数呢?
在k为1的时候可以,因为我们上面的约束是:两个连续的数值之差为2,没有连续的数那岂不是不用满足了

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        int n,k;
        scanf("%d%d",&n,&k);
        if(n%2&&k!=1){
            printf("NO\n");
            continue;
        }
        printf("YES\n");
        int num[2]={2,1};
        for(int i=1;i<=n;i++)
            for(int j=1;j<=k;j++)
                printf("%d%c",num[i%2]," \n"[j==k]),num[i%2]+=2;
    }
    return 0;
}


版权声明:本文为tianyizhicheng原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。