cf 2002A A. Distanced Coloring

题目:

你从一个神秘的来源收到了一个 n×mn×m 网格。这个来源还给了你一个神奇的正整数常数 kk 。

消息来源告诉你用一些颜色给网格着色,并满足以下条件:

  • 如果 (x1,y1)(x1,y1) , (x2,y2)(x2,y2) 是两个颜色相同的单元格,那么 max(|x1−x2|,|y1−y2|)≥kmax(|x1−x2|,|y1−y2|)≥k 。

您不喜欢使用过多的颜色。请找出给网格着色所需的最少颜色数。

思路:

  1. 如果对数字敏感,可以从样例看出来结果是min(n, k) * min(m, k),不行的话就拼小脑袋瓜了
  2. 因为最大值要大于等于k,所以最好的方法是最大值等于k,如果是1 * m的图形,就是把第一行抽出来单独来看,第一个放置一个颜色,放置k个颜色之后重复k个颜色,直到到第m个格,所以1* m图形的结果是min(m, k),那么n * 1的结果就是min(n, k) ,可以推广到n * m 图形的结果就是min(n, k) * min(m, k),代码如下
#include<iostream>
#include<algorithm>
using namespace std;

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int t;
	cin >> t;
	while(t--) {
		int n, m, k;
		cin >> n >> m >> k;
		cout << min(n, k) * min(m, k) << endl; 
	}
	return 0;
}
	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值