专栏文章

题解 CF2094F

CF2094F题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipgp83s
此快照首次捕获于
2025/12/03 11:43
3 个月前
此快照最后确认于
2025/12/03 11:43
3 个月前
查看原文

题意

给定 n×mn\times m 格子,往里面填入 [1,k][1,k] 的整数,使得各个整数出现次数相同且相同整数不相邻。

思路

简单构造。我们观察 k=2k=2 的情况,不难发现这个结果其实非常容易满足。
如果按照横平竖直的顺序,依次填入 [1,k][1,k],在很多情况下就可以满足条件。唯一一点例外是当 mmkk 的倍数时,每一横行的所有数都会相同。
严谨一点说,当 mm 不是 kk 的倍数时,依次填入 [1,k][1,k],由于 k2k\ge 2,所以一个数左右两边一定是与此数不同的。而上下的数由于存在余数的缘故,也一定不同。
因此特判 mmkk 的倍数的情况,将一行所有数平移一格并将头部数字放到尾部即可。

程序如下

CPP
#include<cstdio>
#include<cstring>
using namespace std;
int T,n,m,k;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&n,&m,&k);
		int cur=0;
		for(int i=1;i<=n;i++){
			if(m%k==0&&i%2==0){
				cur++;
				for(int i=1;i<=m;i++)printf("%d ",(++cur)%k+1);
				cur--;
			}
			else
				for(int i=1;i<=m;i++)
					printf("%d ",(++cur)%k+1);
			puts("");
		}
	}
	return 0;
}

THE END

评论

0 条评论,欢迎与作者交流。

正在加载评论...