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 enterprise 下完全删除oracle 数据库

步骤 1     以 oracle 用户登录主、备节点。 步骤 2     关闭 数据库 监听。 > lsnrctl stop 步骤 3     关闭数据库 实例 。 > sqlplus '/as sysdba' > shutdown immediate 步骤 4     以root用户登录数据库 服务器 。 步骤 5     删除Oracle用户。 # userdel -r or

CSS盒模型--边框设置:border: 1px solid red(像素 样式 颜色 ),border-bottom:1px dotted #ccc

盒模型--边框(一) 盒子模型的边框就是围绕着内容及补白的线,这条线你可以设置它的粗细、样式和颜色(边框三个属性)。 如下面代码为div来设置边框粗细为2px、样式为实心的、颜色为红色的边框: div{border:2px solid red;} 上面是border代码的缩写形式,可以分开写: div{border-width:2px;border-style:solid;bord

MS17-010(Eternal blue永恒之蓝)漏洞利用+修复方法

目录 一、漏洞简介 漏洞原理 影响版本 二、漏洞复现 三、复现过程 1、扫描局域网内的C段主机(主机发现) 扫描结果: 2.使用MSF的永恒之蓝漏洞模块 3.对主机进行扫描,查看其是否有永恒之蓝漏洞 4.准备攻击 四、漏洞利用 五、提升权限 1.创建新用户 2.将用户添加至管理员群组 3.查看端口的开启情况 六、远程登录 七、漏洞修复 一、漏洞简介 永

【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)

Ubuntu系统、nas、Red-Hat系统 各自设置静态ip的方法 1.Ubuntu系统设置静态ip 首先打开终端,输入命令 sudo vim /etc/network/interfaces 进入到文件中开始我们的配置 只需要在该文件中添加如下内容: auto ens33 #网卡名iface ens33 inet static #设置为静态address 192.168.190.3

IOT-Tree 1.7.0实现了一个类似Node-Red的流程功能

本人一直研究这个软件,1.7.0版本最近刚刚发布,里面有个大变化,增加了消息流的功能,这个功能和IBM的Node-Red很相似。 Node-Red那个图形化流程很多年前就给了我很深刻的印象,我个人理解是,通过这样的图形化编程机制把软件开发直接分成了两个层次。 1. 一个是应用层面,给用户、项目实施技术人员或维护人员能够在不需要掌握深入技术的前提下,还可以快速实现业务需要,并且极大的降低后续业务

虚拟机安装Red Hat Enterprise Linux4(不完整)

一、安装VMare Workstation (1)进行碎片整理 (2)安装VM9,选择Typical-change-建议重启 二、安装Red Hat Enterprise Linux4 (1)点击create a new Virtual Machine (3)选择Typical (4)选择 I will install the operating system later (5)选择Linnx (

hdoj1312 Red and Black--深度优先搜索

分析:深度优先搜索 #include<stdio.h>#include<string.h>#include<limits.h>int map[22][22]; //存储int w,h,max=INT_MIN;int dx[]={0,1,0,-1},dy[]={-1,0,1,0};//定义方向,(-1,0)左移动,(1,0)右移动,(0,-1)上移动,(0,1)下移动void dfs(in

HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) 解题报告

题目链接:HDU1312 / POJ1979 / ZOJ2165 Red and Black(红与黑) Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9902    Accepted Submiss

关闭/开启Red hat防火墙

关闭/开启Red hat防火墙   /* 关闭防火墙 */ service iptables stop   /* 开启防火墙 */ service iptables start   /* 默认关闭防火墙 */ chkconfig iptables off