Codeforces Round 941 (Div. 2) (A~D)

本文解析了CodeforcesRound941比赛中的四道题目,涉及贪心策略、构造算法和博弈论,展示了如何通过实例分析和编程实现解决这些与数列、染色和游戏相关的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Codeforces Round 941 (Div. 2) (A~D)

本题解思路是个人的和官方题解思路差别可能较大,仅供参考

目录:A B C D

A题:Card Exchange

标签: 贪心策略(greedy)

题目大意

  • 给 n 张牌,每张牌上都写着一个数字,还有一个固定整数 k,可以多次进行下面的运算:
    • 从手牌中任意选择 k 张数字相同的牌
    • 将这些牌换成 k−1张牌,每张牌上数字任意
  • 最少有多少张牌?

思路

  • 分两种情况
    • 如果有 k 张牌相同那么可以将其变为 k - 1张与剩下牌相同的牌,那么被变的牌又有了k张,重复此操作,最终一定会剩下k - 1张牌不会再变化
    • 如果没有 k 张牌相同那么无法操作
  • 以 4 4 4 9 5 5 k = 3 为例
    将 4 4 4 变为 9 9 此时手牌为:9 9 9 5 5
    将 9 9 9 变为 5 5 此时手牌为:5 5 5 5
    将5 5 5 变为 5 5 此时手牌为:5 5 5
    再将5 5 5 变为5 5 此时手牌为:5 5
    无法再发生变化,可以证明这一定为最少手牌

AC代码

#include <bits/stdc++.h>
using namespace std;
const int N = 110; 
int cnt[N];
void solve()
{
   
   
	int n, k;
	cin >> n >> k;
	for(int i = 1; i <= 100; i++)
		cnt[i] = 0;
	int flag = 0;
	for(int i = 0; i < n; i++)
	{
   
   
		int a; cin >> a;
		cnt[a] ++;
		if(cnt[a]>=k) flag = 1;
	}
	if(flag) cout << k -1 << endl;
	else cout << n << endl;
}
int main()
{
   
   
	int T; cin >> T;
	while(T--)
		solve();
	return 0; 
}

B题:Rectangle Filling

标签: 构造算法(constructive algorithms)

题目大意

  • 有一个由白色和黑色方格组成的 n×m网格。在一次操作中,可以选择任意两个相同颜色的方格,并将它们之间的子方格中的所有方格都染成相同的颜色。
  • 例如如下染色方式:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • 问题:网格中所有方格的颜色是否可能相同?

思路

  • 结论:假设全部染成白色:那么在第一行,第一列,最后一行,最后一列一定都含有白色块
  • 解释:
    • 必须:如果第一列不含白色块,那么第一行全为黑色,如何染色也不可以将第一行全变为白色,最后一行,第一列,最后一行同理<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值