MT3027 red and blue

2024-04-25 15:28
文章标签 red blue mt3027

本文主要是介绍MT3027 red and blue,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

样例1:

输入:

8
4
1 2 5 2
BRBR
2
1 1
BB
5
3 1 4 2 5
RBRRB
5
3 1 3 1 3
RBRRB
5
5 1 5 1 5
RBRRB
4
2 2 2 2
BRBR
2
1 -2
BR
4
-2 -1 4 0
RRRR

 输出:

YES
NO
YES
YES
NO
YES
YES
YES

思路:贪心。

贪心策略:设B有x个,则R有n-x个。让B和R的优势都发挥出来,即让B尽可能变小,变成1~x的数;让R尽可能变大,变成值的范围为x+1~n的数。B往后排,R往前排。

先排B再排R,即先按BBBRRR排列,再按1234排列。

正确代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int t, n;
struct aa
{int v;      // 值char color; // 颜色 r变大,b变小
} a[N];
bool cmp(aa a, aa b)
{if (a.color == b.color)return a.v < b.v;elsereturn a.color < b.color;
}
int main()
{cin >> t;while (t--){cin >> n;for (int i = 0; i < n; i++)cin >> a[i].v;for (int i = 0; i < n; i++)cin >> a[i].color;sort(a, a + n, cmp);int flag = 1; // 默认yesfor (int i = 0; i < n; i++){if (a[i].color == 'B' && a[i].v < i + 1){flag = false;break;}if (a[i].color == 'R' && a[i].v > i + 1){flag = false;break;}}if (flag)cout << "YES" << endl;elsecout << "NO" << endl;}
}

ps:下面是一个错误代码,样例都过不去,结果居然AC了。。

(下面代码的贪心策略错了,cmp中不应该先判断值再判断颜色,应该反过来)

(如果输入为1,-2,则排序后先对-2分析,color为R可以增大为1;再对1分析,color为B,只能减小不能增大为2,所以输出了NO,但应该输出YES)

#include <bits/stdc++.h>
using namespace std;
const int N = 10;int t, n;struct aa
{int v;           // 值char color;      // 颜色 r变大,b变小bool st = false; // 是否被选中
};
bool cmp(aa a, aa b)
{if (a.v < b.v)return true;else if (a.v == b.v && a.color == 'B' && b.color == 'R')return true;return false;
}
vector<aa> a;
int main()
{cin >> t;while (t--){a.clear();cin >> n;int x[N];char y[N];for (int i = 0; i < n; i++)cin >> x[i];for (int i = 0; i < n; i++)cin >> y[i];for (int i = 0; i < n; i++)a.push_back({x[i], y[i]});//>n要减小 <1要增大sort(a.begin(), a.end(), cmp); // r变大,b变小int flag = 1;                  // 默认yesfor (auto i : a){if (i.v < 1){if (i.color == 'B'){cout << "NO" << endl;flag = 0;break;}}else if (i.v > n){if (i.color == 'R'){cout << "NO" << endl;flag = 0;break;}}}if (flag == 0){continue;}int j = 1; // 1~nfor (vector<aa>::iterator i = a.begin(); i != a.end(); i++){if ((*i).v == j && (*i).st == false){(*i).st = true;j++;}else if ((*i).v != j && (*i).st == false){if ((*i).v > j && (*i).color == 'B'){(*i).v = j;(*i).st = true;j++;}else if ((*i).v < j && (*i).color == 'R'){(*i).v = j;(*i).st = true;j++;}else if ((*i).v > j && (*i).color != 'R') // 找r{for (auto k = i; k < a.end(); k++){if ((*k).v > j && (*k).color == 'R' && (*k).st == false){(*k).v = j;(*k).st = true;j++;swap((*i), (*k));break;}}}else if ((*i).v < j && (*i).color != 'B') // 找b{for (auto k = i; k < a.end(); k++){if ((*k).v < j && (*k).color == 'B' && (*k).st == false){(*k).v = j;(*k).st = true;j++;swap((*i), (*k));break;}}}}}int t = 1;int f = 1; // 默认yesfor (auto i : a){if (i.v != t){f = 0;cout << "NO" << endl;break;}else{t++;}}if (f == 1){cout << "YES" << endl;}}
}

(样例倒数第二个输出不对,但也AC了。。)

这篇关于MT3027 red and blue的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935062

相关文章

Red Hat环境Git的下载和配置

安装git:         yum install git 设置git信息:              git config --global user.name "github"          git config --global user.email "github@gmail.com" 生成ssh key:         ssh-keygen -t rsa -C "gi

【STM32 Blue Pill编程】-ADC数据采样(轮询、中断和DMA模式)

ADC数据采样(轮询、中断和DMA模式) 文章目录 ADC数据采样(轮询、中断和DMA模式)1、硬件准备及接线2、ADC轮询模式2.1 轮询模式配置2.2 代码实现 3、ADC中断模式3.1 中断模式配置3.2 代码实现 4、ADC的DMA模式4.1 DMA模式配置4.2 代码实现 在本文中,我们将介绍如何使用 ADC 并使用 STM32CubeIDE 和 HAL 库读取模拟输

Red Hat 9 — Red Hat 9.4Linux系统 虚拟机安装【保姆级教程】

Mac分享吧 文章目录 效果一、下载软件二、安装软件与配置1、安装2、配置 三、查看基本信息安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、安装软件与配置 1、安装 2、配置 三、查看基本信息 安装完成!!!

美团2024秋招编程题:小美的red子序列数量之和

题目为: 小美有一个字符串,小美想知道这个字符串的所有连续子串中,red 子序列的数量之和。 子串是指从原字符串中,连续的选择一段字符组成的新字符串。 定义 red 子序列为从原字符串中从左到右依次取出r、e和d组成的新字符串。 输入描述 第一行输入一个长度不超过10^5、且仅由小写字母构成的字符串s,代表小美的字符串。 输出描述 在一行上输出一个整数,代表所有子串中 red 子

【STM32 Blue Pill编程】-UART数据发送与接收(DMA模式)

UART数据发送与接收(DMA模式) 文章目录 UART数据发送与接收(DMA模式)1、DMA介绍2、STM32的UART端口3、硬件准备及接线4、UART配置5、代码实现 在本文中,我们将展示如何使用STM32 Blue Pill UART 通过直接内存访问(DMA)来发送和接收数据。这一过程而无需涉及 CPU。 在 DMA 模式下,数据可以从 UART RX 数据寄存器传输到

E - Red Polyomino 关于回溯 和爆搜

这题就是爆搜。。虽然看似有2^(nn)的复杂度。。 但是实际上因为相连的限制。。种类非常有限。。样例88的就可以看出来。 所以就是爆搜而已。。 记录这题是因为。之前一直在思考回溯 到底和爆搜什么关系。。 目前算是阶段性的一个理解。。 回溯只不过是爆搜的一种方式而已。。 如果我们可以每层递归 都是拷贝。而不是引用。。实际上是不需要回溯的。 回溯只在于样本只有一份。就是传引用的时候。我们只有通过恢

【STM32 Blue Pill编程】-UART数据接收与发送(轮询模式)

UART数据接收与发送(轮询模式) 文章目录 UART数据接收与发送(轮询模式)1、STM32的UART端口2、串口数据发送2.1 硬件准备及接线2.2 串口配置2.3 串口数据发送实现 3、串口数据接收4、printf函数重定向 每当我们进行嵌入式系统应用程序开发时,我们都需要使用串行通信协议。 UART/USART 在微控制器和计算机之间传输数据以用于各种目的。 最重要的应用

HDU1312 Red and Black

大致题意:搜索邻接字符到底有多少个 #define LOCAL#include <iostream>#include <fstream>using namespace std;const int maxn = 20 +1;char maze[maxn][maxn];int dx[4] = {0, 1, 0, -1};int dy[4] = {1, 0, -1, 0};int sum;

如何在虚拟机中为RED HAT配置本地yum源

本文以red hat enterprise linux 6为例,叙述如何为虚拟机中的linux配置本地yum源 首先在/mnt目录中创建dvd目录(其实这一步依据个人喜好,目录名随你定,只要记得后面同步就行了) [root@localhost ~]# mkdir /mnt/dvd 接着把镜像挂载到创建的目录下(要在/dev里面找到cdrom这个文件,必须把镜像加载到虚拟机里面,通常安装之后,假

使用Node-RED实现和部署物联网入侵检测的机器学习管道

整理自 《Implementing and Deploying an ML Pipeline for IoT Intrusion Detection with Node-RED》,由 Yimin Zhang 等人撰写,发表于 2023 年 CPS-IoT Week Workshops。以下是根据提供的 PDF 内容整理的论文的详细主要内容: 摘要 (Abstract) 论文讨论了物联网(Io