1 条题解
-
0
自动搬运
来自洛谷,原作者为

MY(一名蒟蒻)
你数据结构都用错了,怎么改都是没用的。搬运于
2025-08-24 22:33:51,当前版本为作者最后更新于2021-09-22 13:44:20,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P7873 「SWTR-07」Scores(easy version)
小清新构造。
我觉得看简化题意不如看原题面,有代入感会比较好理解题目。
不能让一个人的所有科目分数都不比另一个人高。
无解的情况只有有多个人且只有一个科目的时候。
做题一定要关注数据范围。
注意到最多只有 科和一百个人。那我们可以假定每一科每个人的分数互不相同来让题目变得简单一点。这里的语序很重要。
假设有个人在某一科有 个人比他高,那么他只要在另一科考得比这 个人都高就好。
讲到这里思路已经呼之欲出了。我赛时的想法是安排相邻的两科的分数一科升序一科降序。写题解的时候又想到让前面 科全部升序或者降序,最后一科反过来就好。这种思路就留给读者实现了
我懒得写了。代码实现非常容易,没啥核心代码就放整个了。以下是赛时代码。
#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 !
- 1
信息
- ID
- 5687
- 时间
- 200ms
- 内存
- 16MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者