Codeforces Round 923 (Div. 3)(A~D题解)

news2024/10/5 15:30:53

目录

A. Make it White

B. Following the String

C. Choose the Different Ones!

D. Find the Different Ones!


A. Make it White

Problem - A - Codeforces

题意:问在一个只含有'W'和'B'元素的字符串中,选择一个L到R范围,将之间包含的B全部变成W,W则不变,找到(R-L+1)的最小值。

思路:因为每个B都需要染色,所以我们只需要找最左边的B和最右边的B,再加一些细节优化。

AC代码:

#include<iostream>
#include<set>
#include<map>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
#define ll long long
using namespace std;
const int N = 200010;
const int M = 100100;
const ll mod = 1e9 + 7;
void solve()
{
    int n;
    cin >> n;
    string s;
    cin >> s;
    int pos1 = -1, pos2 = -1;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == 'B')
        {
            pos1 = i;
            break;
        }
    }
    for (int i = s.size() - 1; i >= 0; i--)
    {
        if (s[i] == 'B')
        {
            pos2 = i;
            break;
        }
    }
    if (pos1 == -1 && pos2 == -1)
    {
        cout << "0\n";
        return;

    }
    if (pos1 == pos2)
    {
        cout << "1\n";
        return;
    }
    cout << abs(pos1 - pos2)+1 << "\n";
}
int main()
{
    
    int T;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

B. Following the String

Problem - B - Codeforces

题意:给你一个数组,数组的大小代表,从0到这个这个,某个小写字母出现的次数,要求我们输出符合该数组对应的一个字符串。

思路:对于每个数组的元素,判断这个元素在之前出现了多少次,根据出现的次数n+‘a’为这个位置的小写字母,记录下来即可。

AC代码:

#include<iostream>
#include<set>
#include<map>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
#define ll long long
using namespace std;
const int N = 200010;
const int M = 100100;
const ll mod = 1e9 + 7;
int pos[N];
void solve()
{
    memset(pos, 0, sizeof(pos));
    int n;
    cin >> n;
    vector<int>a(n + 1);
    for (int i = 1; i <= n; i++) cin >> a[i];
    map<int, char>q;
    char st = 'a';
    for (int i = 1; i <= n; i++)
    {
        q[i] = pos[a[i]] + 'a';
        pos[a[i]]++;
    }
    for (int i = 1; i <= n; i++)
        cout << q[i];
    cout << "\n";
}
int main()
{
    
    int T;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

C. Choose the Different Ones!

Problem - C - Codeforces

题意:在两个数组中,都只能拿k/2个元素,问是否可以找到1到k的所有元素。

思路:先对两个数组排序,我们只需要1到k之间的数,大于的就不需要了,用两个标记组数去计数两个数组中1到k之间元素的出现的情况,出现了标1,反之为0,当对于一个1到k之间的元素,这两个标记数组都是0,此时可以直接输出NO退出。

后面最关键的来了。

有时候会有元素只出现在某个数组中,如果不好好分配选择次数还是会找不全。

关键的就是计数两个数组你有我没有的数量。这两个的数量与k/2比较一下,若是有一个大于那么直接输出NO,反之输出YES。

下面是AC代码:

#include<iostream>
#include<set>
#include<map>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
#define ll long long
using namespace std;
const int N = 200010;
const int M = 100100;
const ll mod = 1e9 + 7;
void solve()
{
   
    int n, m, k;
    cin >> n >> m >> k;
    vector<int>a(n), b(m);
    vector<int>f1(k + 1), f2(k + 1);
    for (int i = 0; i < n;i++ ) cin >> a[i];
    for (int i = 0; i < m; i++) cin >> b[i];
    sort(a.begin() , a.end());
    sort(b.begin(), b.end());
    ll t = 1,t1=0,t2=0,i=0,j=0;
    if (n < k / 2 || m < k / 2)
    {
        cout << "NO\n";
        return;
    }
    for (int i = 0; i < n && a[i] <= k; i++)
    {
        f1[a[i]] = 1;
    }
    for (int i = 0; i < m && b[i] <= k; i++)
    {
        f2[b[i]] = 1;
    }
    int c1 = 0, c2 = 0;
    for (int i = 1; i <= k; i++)
    {
        if (f1[i] == 0 && f2[i] == 0)
        {
            cout << "NO\n";
            return;
        }
        if (f1[i] && !f2[i]) c1++;
        if (!f1[i] && f2[i]) c2++;
    }
    if (c1 > k / 2 || c2 > k / 2)
    {
        cout << "NO\n";
        return;
    }
    cout << "YES\n";
    return;
}
int main()
{
    
    int T;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

D. Find the Different Ones!

Problem - D - Codeforces

题意:给出一个长度为n的数组,再给出q次询问,问你L到R之间有没有一对不同的数,如果没有就输出两个-1,否则输出这两个数的下标。

思路:我们将这个问题分成两个问题;

1.我们如何判断L到R的范围有没有不同的数字。

2.我们如何快速得找到两个不同数子的下标。

(1)我们可以用一个标记数组来解决问题1。首先标记数组b的第一个元素为0,其他的元素判断。

从2开始,如果数组这个元素等于前一个元素,那么标记数组b当前的位置也是0,否则就是0+1=1。

循环到n就完成了。

我们此时发现L到R的范围,如果b[R]-b[L]==0,那么说明之间的元素都是相同的。

(2)现在我们解决第二个问题。

我们发现我们的标记数组b非常的巧妙,从b[L]到b[R]之间出现的第一个大于前一个元素的值就是我们要找的不同的下标。

但是线性搜索可能超时,我们直接用二分去缩短时间。

最后在0.999秒的时间复杂度下勉强拿下这道题。

下面是AC代码:

#include<iostream>
#include<set>
#include<map>
#include<string>
#include<queue>
#include<vector>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
#define ll long long
using namespace std;
const int N = 200010;
const int M = 100100;
const ll mod = 1e9 + 7;
ll q[N],a[N];
void solve()
{
    ll n;
    cin >> n;
 
    for (int i = 1; i <= n; i++) cin >> a[i];
    ll c = 0;
    for (int i = 2; i <= n; i++)
    {
        if (a[i] == a[i - 1]) q[i] = c;
        else q[i] = ++c;
    }
    q[1] = 0;
    ll t;
    cin >> t;
    while (t--)
    {
        ll l, r;
        cin >> l >> r;
        if (q[r] - q[l] == 0) cout << -1 << " " << -1 << "\n";
        else
        {
            cout << l << " ";//二分
            ll pos = upper_bound(q+l, q+r,q[l])-q;
            cout << pos << "\n";
        }
    }
}
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        solve();
    }
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3568技术笔记八 开发环境的搭建

先按照前面的方法将 ubuntu 安装在 PC 机上。 编译开发Linux系统&#xff0c;虚拟机Ubuntu 系统要求&#xff1a; 64位系统&#xff0c;硬盘空间大于或等于200G&#xff0c;内存不小于6GB。 建议使用 Ubuntu18.04 系统进行编译。 光盘资料&#xff1a;SAIL-RK3568开发板光盘…

Ceph: vdbench 测试ceph存储rbd块设备

目录 2.搭建ceph 3.vdbench环境 准备 笔记本架构&#xff1a;x86 i5 8 代 虚拟化软件&#xff1a;virtualBox 7.0 操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 测试虚拟机操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 节点 外部网络 内部网…

langchain教程-(1)Prompt模板

LangChain 的核心组件 模型 I/O 封装 LLMs&#xff1a;大语言模型Chat Models&#xff1a;一般基于 LLMs&#xff0c;但按对话结构重新封装PromptTemple&#xff1a;提示词模板OutputParser&#xff1a;解析输出 数据连接封装 Document Loaders&#xff1a;各种格式文件的加载…

C# yolov8 OpenVINO 同步、异步接口视频推理

C# yolov8 OpenVINO 同步、异步接口视频推理 目录 效果 项目 代码 下载 效果 同步推理效果 异步推理效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading; using System.Windows.Form…

YOLOv10改进 | 主干篇 | YOLOv10引入FasterNeT替换Backbone

1. FasterNeT介绍 1.1 摘要: 为了设计快速神经网络,许多工作一直致力于减少浮点运算(FLOP)的数量。 然而,我们观察到,FLOP 的减少并不一定会导致延迟的类似程度的减少。 这主要源于每秒浮点运算 (FLOPS) 效率低下。 为了实现更快的网络,我们重新审视流行的算子,并证明…

点击即转换,Mistune库助你驾驭Markdown文档!

mistune 是一个用于将 Markdown 文本解析为 HTML 的 Python 库.它提供了快速、简单的方法来处理 Markdown 格式的文本,并将其转换为 HTML,适用于将 Markdown 文档集成到网站、博客等项目中. 安装 #可以使用 pip 来安装 mistune&#xff1a;pip install mistune示例 基本用法…

《SelectDB 新一代日志存储分析平台解决方案》白皮书重磅发布|立即下载

随着信息技术的飞速进步&#xff0c;企业面临着前所未有的系统复杂性和数据挑战。在此背景下&#xff0c;日志数据成为了企业洞察系统内部状态、监控网络安全以及分析业务动态的宝贵资源&#xff0c;构建高效的日志存储与分析平台至关重要。 作为基于 Apache Doris 打造的现代…

计算机网络:运输层 - 概述

计算机网络&#xff1a;运输层 - 概述 运输层的任务端口号复用与分用UDP协议首部格式 TCP协议面向字节流 运输层的任务 物理层、数据链路层以及网络层&#xff0c;他们共同解决了将主机通过网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信。 网络层的作用范围是…

CVE-2011-1473: OpenSSL权限许可和访问控制问题漏洞及解决方案

CVE-2011-1473: OpenSSL权限许可和访问控制问题漏洞 漏洞详情&#xff1a; OpensSL.是OpensSL团队的一个于源的能够实现安全套接层&#xff08;SSL2/3&#xff09; 和安全传输层&#xff08;TLSw1&#xff09;协议的通用加密库。该产品支持多种加密算法&#xff0c;包括对称密…

.NET周刊【6月第3期 2024-06-18】

国内文章 记一次 .NET某游戏币自助机后端 内存暴涨分析 https://www.cnblogs.com/huangxincheng/p/18243233 文章讨论了程序中非托管内存暴涨的问题。作者描述了友人发现内存问题并请他帮助分析的背景&#xff0c;利用WinDbg工具分析Linux平台上的内存泄漏情况。文章介绍了如…

Gotchi 战士们准备好吧!稀有度挖矿第八季锦标赛即将开始!

我们很高兴地宣布稀有度挖矿第 8 赛季的比赛即将开始&#xff0c;比赛将设立 15 万 GHST 的巨额奖金池&#xff0c;同时还将进行新的更新&#xff0c;让您有更多的方式来制定战略并与您的小鬼好友们一较高下。 本赛季引入了双败淘汰赛&#xff0c;每支队伍可以有两名替补队员&a…

AI办公自动化:批量根据Excel表格内容制作Word文档

工作任务&#xff1a;Excel表格中有大量文本&#xff0c;根据这些文本自动生成word文档 在chatgpt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 读取Excel文件&#xff1a;"F:\AI自媒体内容\AI视…

系统学习PLC

1.OB组织块 程序循环 PC ob1执行一次 ob123也执行一次 是 statup是程序启动的是第一个周期先执行starup&#xff08;0b100&#xff09;然后在执行ob1和0b123.这二个循环&#xff0c;周期执行这二个循环。1000是1s 2.DB块 建立指定数据块可以直接建立自己喜欢的类型 3.FB与…

Python学习打卡:day09

day9 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 目录 day964、字典课后习题65、5类数据容器的总结对比数据容器分类数据容器特点对比 66、数据容器的通用操作遍历统计len、max 和 min 转换list(容器)、…

miniconda安装教程以及pip换源【Windows版本】

Anaconda包含内容较多&#xff0c;这边采用miniconda进行安装演示。 下载安装包 官网链接&#xff1a;https://docs.anaconda.com/miniconda/ 蓝奏云加速链接&#xff1a;https://wwt.lanzoue.com/i6ts3225vuef 开始安装 配置conda 在Windows开始菜单中&#xff0c;找到刚安…

02-ES6新语法

1. ES6 Proxy与Reflect 1.1 概述 Proxy 与 Reflect 是 ES6 为了操作对象引入的 API 。 Proxy 可以对目标对象的读取、函数调用等操作进行拦截&#xff0c;然后进行操作处理。它不直接操作对象&#xff0c;而是像代理模式&#xff0c;通过对象的代理对象进行操作&#xff0c;…

微信小程序毕业设计-小区疫情防控系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

上海SNEC光伏展参展总结--安科瑞

安科瑞戴婷 Acrel-Fanny 今年的snec上海光伏展吸引了来自全球各地的光伏行业专业人士及爱好者&#xff0c;本次展会共有来自30多个国家和地区的超过2000家企业参展&#xff0c;展出的光伏产品涵盖了太阳能电池、太阳能组件、逆变器、太阳能辅助设备等众多领域。 随着近年来光…

RK3568技术笔记九 编译Linux详细介绍

在编译前需要按照前面的方法始化编译环境&#xff0c;否则会导致编译失败&#xff08;若配置过则无需重复配置&#xff09;。 全自动编译包含所有镜像编译&#xff0c;包括&#xff1a;uboot编译、Kernel编译、Recovey编译、文件系统编译、编译完成镜像的更新与打包。 按照前面…

Transformer模型:未来的改进方向与潜在影响

Transformer模型&#xff1a;未来的改进方向与潜在影响 自从2017年Google的研究者们首次提出Transformer模型以来&#xff0c;它已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域的面貌。Transformer的核心优势在于其“自注意力&#xff08;Self-Attention&#xf…