洛谷P7886 「MCOI-06」Gerrymandering 题解
AI-摘要
Chat GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
洛谷P7886 「MCOI-06」Gerrymandering 题解
Jerry Zhou这是本蒟蒻的第一篇题解
读题点这里:P7886 「MCOI-06」Gerrymandering
题意
题目要求将一个 表格染色,使得每一个颜色形成恰好一个连通块,并且每一个连通块大小为
特判
我们共有4种特判情况
-
当 或 时,没有答案,输出
NO
1
if(n*m<k||n*m%k!=0) cout<<"NO"<<endl;
-
当 时,存在答案,且每一格的数字都不一样 (Subtask 1)
1
2
3
4
5
6
7
8
9cout<<"YES"<<endl;
int cnt=1;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cout<<cnt<<" ";
cnt++;
}
cout<<endl;
} -
当 时,存在答案,且答案只有一行。直接输出 个数即可 (Subtask 2) (这一步骤与普通情况可以共用一个代码,故可以省略,但在这里为了便于理解,还是列出)
1
2
3
4cout<<"YES"<<endl;
for(int i=1;i<=m/k;i++)
for(int j=1;j<=k;j++) cout<<i<<" ";
cout<<endl; -
当 时,存在答案,且每一格都是1
1
2
3
4
5cout<<"YES"<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++) cout<<1<<" ";
cout<<endl;
}
普通情况
先将所有的数字存入一个一维数组,再蛇形展开即可
如测试样例中的 6 6 4
就可以先存入一维数组,变成 1 1 1 1 2 2 3 3 3 3 2 2 4 4 4 4 5 5 6 6 6 6 5 5 7 7 7 7 8 8 9 9 9 9 8 8
再蛇形展开为
1 | 1 1 1 1 2 2 |
普通情况的代码如下:
1 | cout<<"YES"<<endl; |
完整代码
1 |
|
评论
匿名评论隐私政策