【cf】Codeforces Round 941(Div.2)题解 A - D

前三题出的最快的一次,但是d没出
在这里插入图片描述

A. Card Exchange

只要有一种颜色大于等于 k,那就是 k-1,否则就是 n

#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

void solve()
{
	int n, k;
	cin >> n >> k;
	map<int, int> mp;
	for (int i = 0; i < n; i ++ )
	{
		int x; cin >> x;
		mp[x] ++ ;
	}
	bool flag = false;
	for (auto t : mp)
	{
		if (t.second >= k)
		{
			flag = true;
			break;
		}
	}
	if (flag) cout << k - 1 << '\n';
	else cout << n << '\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

B. Rectangle Filling

首先看如果有对角颜色一样,就直接 Yes

如果对角颜色都不一样,就看四条边的颜色情况,看每条边是否有两种不一样的颜色,如果上边和左边有不一样的颜色,就可以直接改变左上角端点的颜色,其他端点也类似,只要有一个端点的颜色可以被改变,就能完成任务

#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

void solve()
{
	int n, m;
	cin >> n >> m;
	vector<vector<char>> g(n + 1, vector<char>(m + 1));
	for (int i = 1; i <= n; i ++ )
		for (int j = 1; j <= m; j ++ )
			cin >> g[i][j];
	if (g[1][1] == g[n][m] || g[1][m] == g[n][1])
	{
		cout << "YES\n";
		return;
	}
	vector<bool> flag(4);
	map<char, int> mp;
	for (int i = 1; i <= n; i ++ )
	{
		mp[g[i][1]] ++ ;
	}
	if (mp.size() == 2) flag[0] = true;
	mp.clear();
	
	for (int i = 1; i <= n; i ++ )
	{
		mp[g[i][m]] ++ ;
	}
	if (mp.size() == 2) flag[1] = true;
	mp.clear();

	for (int i = 1; i <= m; i ++ )
	{
		mp[g[1][i]] ++ ;
	}
	if (mp.size() == 2) flag[2] = true;
	mp.clear();
	
	for (int i = 1; i <= m; i ++ )
	{
		mp[g[n][i]] ++ ;
	}
	if (mp.size() == 2) flag[3] = true;
	mp.clear();
	if ((flag[2] && flag[0]) || (flag[2] && flag[1]) || (flag[1] && flag[3]) || (flag[0] && flag[3]))
	{
		cout << "YES\n";
		return;
	}
	cout << "NO\n";
	return;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

C. Everything Nim

首先要想明白一点就是,如果序列中有 1,那操作是被固定的,只能选择 1,但是如果序列中没有 1,我可以使用操作使得序列中出现 1,这样对方的操作就被固定了

举个栗子,如果序列是 3 5 7 9,第一个操作的人可以使它变成 1 3 5 7,这样第二个操作的只能变成 2 4 6,第一个人再变成 1 3 5,第二个人只能 2 4……也就是通过我的操作使得序列最小是 1,去限制对方的操作

但是如果序列有 1,首先就会限制自己的操作,一直到 1 2 3 4 … 连续序列被打断为止

如果这样被限制的操作是奇数次,那下一个可以自由操作的人就是Bob,所以Bob赢(除非已经没有可以操作的序列了)

如果这样被限制的操作是偶数次,那下一个可以自由操作的人就是Alice,所以Alice赢(除非已经没有可以操作的序列了)

#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

void solve()
{
	int n;
	cin >> n;
	vector<int> a(n);
	for (int i = 0; i < n; i ++ ) cin >> a[i];
	sort(a.begin(), a.end());
	a.erase(unique(a.begin(), a.end()), a.end());
	if (a[0] != 1)
	{
		cout << "Alice\n";
		return;
	}
	int pos = 1;
	for (int i = 1; i < a.size(); i ++ )
	{
		if (a[i] == i + 1) pos = i + 1;
		else break;
	}
	if ((pos % 2 != 0 && pos != a.size()) || (pos % 2 == 0 && pos == a.size())) cout << "Bob\n";
	else cout<< "Alice\n";
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

D. Missing Subsequence Sum

因为我们要把 k 这个位置空出来,首先我们需要保证前 k - 1 个构造出来:

int tmp = k - 1;
for (int i = 1; i <= tmp; i *= 2)
{
	ans.push_back(i);
	tmp -= i;
}

此时 tmp 不为 0 的话还要把 tmp 也放进去

接下来从 k + 1 开始构造到 n:

for (int i = k + 1; i <= n; i *= 2) ans.push_back(i);

观察一下这一次构造出来的数:k+1 2k+2 4k+4 …

从 k+1 到下一个不能直接表示的最大的数(也就是 2k+1)需要加 k ,显然不能直接给 k ,于是直接给 2k+1

再往后看,从 2k+2 到下一个不能直接表示的最大的数(也就是 4k+3)需要加 2k+1,已经有了

从 4k+4 到下一个不能直接表示的最大的数(也就是 8k+7)需要加 4k+3,已经有了

……

(上面只是在说为什么要在最后给 2k+1,但实际上我也不知道应该怎么才能想到这个点)

#include <bits/stdc++.h>

using namespace std;

#define int long long
using i64 = long long;

typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;

const int N = 1e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;

void solve()
{
	int n, k;
	cin >> n >> k;
	int tmp = k - 1;
	vector<int> ans;
	for (int i = 1; i <= tmp; i *= 2)
	{
		ans.push_back(i);
		tmp -= i;
	}
	if (tmp > 0) ans.push_back(tmp);
	for (int i = k + 1; i <= n; i *= 2) ans.push_back(i);
	ans.push_back(2 * k + 1);
	cout << ans.size() << '\n';
	for (auto t : ans) cout << t << ' ';
	cout << '\n';
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);

	int t = 1;
	cin >> t;
	while (t--)
	{
		solve();
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/580079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CONSOB 又下令封锁5个未经授权的投资网站,总数达1065

FX110讯&#xff1a;意大利金融市场监管局 CONSOB 已下令关闭 5 个非法提供金融服务/金融产品的网站。自2019年7月CONSOB有权下令封锁欺诈性金融网站以来&#xff0c;被封禁的网站数量已升至1065个。 以下是 CONSOB 下令新屏蔽的 5个网站&#xff1a; “Luno Invest” Vantage …

C#基础:WPF中常见控件的布局基础

一、用ViewBox实现放缩控件不变 二、布局代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"Title"MainWindow"…

将静态资源解析成组件使用的库

vite版本的vite-plugin-svgr vite-plugin-svgr - npm 使用

排序试题解析(二)

8.4.3 01.在以下排序算法中&#xff0c;每次从未排序的记录中选取最小关键字的记录&#xff0c;加入已排序记录的 末尾&#xff0c;该排序算法是( A ). A.简单选择排序 B.冒泡排序 C.堆排序 D.直接插入排序 02&#xff0e;简单选择排序算法的比较次数和移动次数分别为( C )。…

MongoDB的安装(Linux环境)

登录到Linux服务器执行 lsb_release -a &#xff0c;即可得知服务器的版本信息为&#xff1a;CentOS 7。 # CentOS安装lsb_release包 [rootlinux100 ~]# sudo yum install redhat-lsb# 查看Linux版本 [rootlinux100 ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-…

Signed的本质和作用

前言 Verilog中的signed是一个很多人用不好&#xff0c;或者说不太愿意用的一个语法。因为不熟悉它的机制&#xff0c;所以经常会导致运算结果莫名奇妙地出错。其实了解了signed以后&#xff0c;很多时候用起来还是挺方便的。 signed的使用方法主要有两种&#xff0c;其中一种…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦…

网络安全与密码学

一、密码学概述 一、 密码学是一门研究信息安全保密的学科&#xff0c;主要涉及对信息进行加密、解密以及相关的安全技术和理论。 它通过使用各种加密算法和技术&#xff0c;将明文信息转换为密文&#xff0c;以确保信息在传输和存储过程中的保密性、完整性和真实性。密码学在…

【Day1】【React学习笔记二】JSX基础

1 概念和本质 Babel官网 2 高频使用场景 2.1 JSX中使用JS表达式 2.2 JSX中实现列表渲染

LeetCode 面试题 17.08 —— 马戏团人塔

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先&#xff0c;我们对人的身高按照从小到大排序&#xff0c;特别注意&#xff0c;对于身高相等的人&#xff0c;要按照体重从高到低排序。这时候&#xff0c;序列已经满足了在上面的人要比下面的人矮一点&#…

输电线路的“天眼”:双目协同图像视频监测装置

在广袤的天地之间&#xff0c;纵横交错的输电线路如同血脉一般&#xff0c;为我们的生活输送着源源不断的电力。然而&#xff0c;这些“血脉”也常常面临着各种挑战&#xff0c;如外力破坏、恶劣天气等。为了守护这些重要的“生命线”&#xff0c;鼎信智慧研发了一款智能监控设…

类和对象【下】

本节博客主要围绕构造函数、static成员、友元、内部类、匿名对象等待关于“类和对象”这些细节性知识进行收尾&#xff0c;有需要借鉴即可 类和对象_下目录 1.再谈构造函数1.1初始化列表1.2意义 2.static成员2.1概念2.2特性2.3习题 3.友元3.1友元函数概念3.2友元函数的特性 4.内…

Blender笔记之基本操作

code review! —— 2024-04-27 杭州 Blender笔记…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

选择汽车制造业数据外发解决方案,核心在这三点

汽车制造业是我国国民经济发展的支柱产业之一&#xff0c;汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工等行业&#xff0c;下游主要为个人消 费、基建、客运和军事…

Linux 常用命令分类

一、帮助命令 命令功能语法man求助man [命令]info求助info [命令]help求助[命令] --help 1.1、man 命令 按键功能空格向下翻页pagedown也就是fn ↓ \downarrow ↓向下翻页pageup向上翻页/string向下查找string这个字符串?string向上查找string这个字符串n,Nn表示继续, N表示…

PotatoPie 4.0 实验教程(26) —— FPGA实现摄像头图像拉普拉斯锐化

为什么要对图像进行拉普拉斯锐化 对图像进行拉普拉斯锐化的目的是增强图像的边缘和细节&#xff0c;使图像看起来更加清晰和锐利。这种技术常用于图像处理中&#xff0c;具体原因如下&#xff1a; 增强图像的边缘信息&#xff1a;拉普拉斯锐化可以突出图像中的边缘特征&#x…

Spring AOP(1)

AOP概述 AOP是Spring框架的第二大核心(第一大核心是IoC). 什么是AOP? 即Aspect Oriented Programming(面向切面编程) 什么是面向切面编程呢? 切面就是指某一类特定的问题, 所以AOP也可以叫做面向特定方法编程. 什么是面向特定方法编程呢?比如上一篇中讲到的拦截器, 就是…

windows无法启动Remote Desktop Services服务(位于本地计算机上) 错误2:系统找不到指定文件

在使用远程计算机时出现的错误&#xff0c;计算机在后台能正常打开&#xff0c;而无法使用远程连接&#xff0c;初步判定为远程服务问题&#xff0c;检查步骤如下&#xff1a; 一、检查计算机Remote Desktop Services服务 该服务是开启计算机远程时必要的服务&#xff0c;若该…

2024 年最好的免费数据恢复软件,您可以尝试的几个数据恢复软件

由于系统崩溃而丢失数据可能会给用户带来麻烦。我们将重要的宝贵数据和个人数据保存在我们的 PC、笔记本电脑和其他数字设备上。您可能会因分区丢失、意外删除文件和文件夹、格式化硬盘驱动器而丢失数据。数据丢失是不幸的&#xff0c;如果您不小心从系统中删除了文件或数据&am…
最新文章