题解 P7873 【「SWTR-07」Scores(easy version)】

· · 题解

P7873 「SWTR-07」Scores(easy version)

小清新构造。

我觉得看简化题意不如看原题面,有代入感会比较好理解题目。

不能让一个人的所有科目分数都不比另一个人高。

无解的情况只有有多个人且只有一个科目的时候。

做题一定要关注数据范围。

注意到最多只有 100 科和一百个人。那我们可以假定每一科每个人的分数互不相同来让题目变得简单一点。这里的语序很重要。

假设有个人在某一科有 x 个人比他高,那么他只要在另一科考得比这 x 个人都高就好。

讲到这里思路已经呼之欲出了。我赛时的想法是安排相邻的两科的分数一科升序一科降序。写题解的时候又想到让前面 n-1 科全部升序或者降序,最后一科反过来就好。这种思路就留给读者实现了我懒得写了

代码实现非常容易,没啥核心代码就放整个了。以下是赛时代码。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

int sco[110][110];

int main()
{
//  freopen("work.in","r",stdin); freopen("work.out","w",stdout);
    int t,n,m;
    scanf("%d%d",&t,&t);
    while(t--)
    {
        scanf("%d%d",&n,&m);
        if(m == 1 && n > 1) puts("NO");
        else
        {
            puts("YES");
            for(int j=1;j<=m;j++)
                for(int i=1;i<=n;i++)
                {
                    if(j&1) sco[i][j]=i;
                    else sco[i][j]=n-i+1;
                }
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++) printf("%d ",sco[i][j]);
                puts("");
            }
        }
    }
//  fclose(stdin); fclose(stdout);
    return 0;
}

Thank you for your reading !