Codeforces Round 855 (Div. 3)(A~F)

news2024/12/30 2:01:52

A. Is It a Cat?

定义满足条件的字符串为:其中仅可能含有meow四种字母的大小写,而且相同种类的字母必须挨在一起,四种字母的顺序必须按照meow排列。给出一个字母串,求是否满足条件。

思路:感觉是个很麻烦的模拟。首先把大小写全都转为小写字母,再把相同的字母合并,最后判断一下字母的种类和顺序。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int t, n;
std::string s;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n >> s;
        std::vector<char> vec;
        char c;
        if(s[0] >= 'A' && s[0] <= 'Z')
            vec.push_back((char)(s[0] - 'A' + 'a')), c = (char)(s[0] - 'A' + 'a');
        else
            vec.push_back(s[0]), c = s[0];
        for(int i = 1; i < n; i ++) {
            if(s[i] >= 'A' && s[i] <= 'Z')
                s[i] = (char)(s[i] - 'A' + 'a');
            if(s[i] != c)
                vec.push_back(s[i]), c = s[i];
        }
        if(vec.size() == 4 && vec[0] == 'm' && vec[1] == 'e' && vec[2] == 'o' && vec[3] == 'w')
            std::cout << "YES" << '\n';
        else
            std::cout << "NO" << '\n';
    }
    return 0;
}

B. Count the Number of Pairs

给出一个字符串,对于同一种字母,一个大写一个小写可以凑成一对;给出k次操作,可以将任意一个字母大小写翻转,问给出的字符串中最多可以有多少对字母。

思路:统计字符串中大小写字母的个数,先统计不经过修改可以得到多少串,然后拥挤通过修改可以最多得到多少对即可。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int t, n, k;
std::string s;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n >> k >> s;
        int ans = 0;
        std::unordered_map<char, int> mpl, mpu;
        for(int i = 0; i < n; i ++) {
            if(s[i] >= 'a' && s[i] <= 'z')
                mpl[s[i]] ++;
            else
                mpu[s[i]] ++;
        }
        for(auto [x, y] : mpl) {
            if(y && mpu[x - 'a' + 'A']) {
                ans += std::min(y, mpu[x - 'a' + 'A']);
                mpl[x] -= std::min(y, mpu[x - 'a' + 'A']);
                mpu[x - 'a' + 'A'] -= y, mpu[x - 'a' + 'A'];
            }
        }
        for(auto [x, y] : mpl) {
            if(y >= 2) {
                int res = std::min(k, y / 2);
                ans += res, k -= res, y -= res * 2;
            }
        }
        for(auto [x, y] : mpu) {
            if(y >= 2) {
                int res = std::min(k, y / 2);
                y -= res * 2, ans += res, k -= res;
            }
        }
        std::cout << ans << '\n';
    }
    return 0;
}

C. Powering the Hero

给出一个数组,其中非0的数字可以被存下来,放在一堆中;为0的数可以加上现有的非0数中的一个数。求所有的为0的值,通过修改得到的和最大是多少。

思路:优先队列即可,每次遇到一个非0的数,就将其放进队列中,遇到为0的数就取出队列中最大的数加入答案,并pop出队列,easy版本做法与hard版本相同,时间复杂度O(nlogn),能过。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int t, n;
ll a[N];

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n;
        std::priority_queue<ll> pq;
        ll ans = 0;
        for(int i = 1; i <= n; i ++) {
            std::cin >> a[i];
            if(a[i])
                pq.push(a[i]);
            if(!a[i] && !pq.empty()) {
                ans += pq.top();
                pq.pop();
            }
        }
        std::cout << ans << '\n';
    }
    return 0;
}

D. Remove Two Letters

在字符串中去掉任意两个相连的字母,剩下的串相连,求可以得到多少种不同的字符串。

思路:一开始想hash,但是又不太会hash,又感觉hash很容易被卡。可以这样考虑,从头开始,每次向后转移去掉的两个字母,就是加上上一对字母的前一个,去掉后一对字母的后一个,那直接比较这两个字母即可,只要不同,就对答案有贡献。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int t, n;
std::string s;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> t;
    while(t --) {
        std::cin >> n >> s;
        int ans = 0;
        for(int i = 1; i < n - 1; i ++) {
            if(s[i - 1] != s[i + 1]) {
                ans ++;
            }
        }
        std::cout << ans + 1 << '\n';
    }
    return 0;
}

E. Unforgivable Curse

给出两个字符串s和t,目标是把s修改为t,每次修改可以交换相距k或k+1位置的字母,问是否能修改成功。

思路:很显然,如果某个字符需要修改,但是它距离左右边界的距离都小于k,那必然没法修改。对于其他的位置,我们一定可以找到两个位置互换的方法,即可以通过中间字符修改,而顺着修改的顺序逆着回去,可以复原原来在正确位置的字母。easy版本与hard版本相同。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
const int N = 1e6 + 5;
int T, n, k;
std::string s, t;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> T;
    while(T --) {
        std::cin >> n >> k;
        std::cin >> s >> t;
        std::map<char, int> mp, mpp;
        for(int i = 0; i < n; i ++) {
            mp[s[i]] ++;
            mpp[t[i]] ++;
        }
        bool flag = true;
        for(auto [x, y] : mp) {
            if(y != mpp[x]) {
                flag = false;
                break;
            }
        }
        if(!flag) {
            std::cout << "NO" << '\n';
            continue;
        }
        for(int i = 0; i < n; i ++) {
            if(s[i] != t[i] && std::max(i, n - i - 1) < k) {
                flag = false;
                break;
            }
        }
        std::cout << (flag ? "YES" : "NO") << '\n';
    }
    return 0;
}

F. Dasha and Nightmares

给出n个字符串,问有多少对不同的字符串,使得两个字符串连接起来满足以下条件:字符串中包含25个不同的字母;每个字母的个数为奇数个;字符串长度为奇数。

思路:思路来自cup_cpp佬。考虑哈希。但是显然STL自带的哈希表很容易会被卡掉,就需要一些高端方法自定义哈希表,因为是奇数,所以可以采用位运算实现代码。用二进制下的26位数字存所有的目标字符串,开26个哈希表存对于每个字母不存在时满足条件的方案数。

AC Code:

#include <bits/stdc++.h>

typedef long long ll;
#define int long long
const int N = 2e5 + 5;
int n;
int num[30], cnt[30];
std::string s;

struct custom_hash {
    static uint64_t splitmix64(uint64_t x) {
        x += 0x9e3779b97f4a7c15;
        x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
        x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
        return x ^ (x >> 31);
    }

    size_t operator()(uint64_t x) const {
        static const uint64_t FIXED_RANDOM = std::chrono::steady_clock::now().time_since_epoch().count();
        return splitmix64(x + FIXED_RANDOM);
    }
};

signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    std::cin >> n;
    for(int i = 0; i < 26; i ++) {
        num[i] = ((1 << 26) - 1) ^ (1 << i);
    }
    std::unordered_map<int, int, custom_hash> mp[26];
    for(int i = 0; i < 26; i ++)
        mp[i].reserve(n);
    int ans = 0;
    for(int i = 0; i < n; i ++) {
        std::cin >> s;
        int mask = 0;
        memset(cnt, 0, sizeof(cnt));
        for(auto u : s)
            cnt[u - 'a'] ++;
        for(int i = 0; i < 26; i ++) {
            if(cnt[i] & 1)
                mask ^= (1 << i);
        }
        for(int i = 0; i < 26; i ++) {
            if(!cnt[i] && mp[i].count(mask ^ num[i]))
                ans += mp[i][mask ^ num[i]];
        }
        for(int i = 0; i < 26; i ++) {
            if(!cnt[i])
                mp[i][mask] ++;
        }
    }
    std::cout << ans << '\n';
    return 0;
}

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

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

相关文章

这6个高清图片素材库,马住,马住~

网上找的图片素材清晰度不够&#xff0c;版权不明确怎么办。看看这几个可商用图片素材网站&#xff0c;解决你的所有图片需求&#xff0c;高清无水印&#xff0c;赶紧马住&#xff01; 1、菜鸟图库 美女图片|手机壁纸|风景图片大全|高清图片素材下载网 - 菜鸟图库 ​ 网站素材…

Vector - CAPL - 简介及数据结构

对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉&#xff0c;都知道他是做车载网络测试脚本的语言&#xff0c;并且跟C有点类似&#xff0c;但是它到底是什么呢&#xff1f;CAPL全称&#xff08;Communication Access Programming Language&#…

Qt 崩溃 corrupted double-linked list Aborted

文章目录摘要1 使用全局静态变量2 不取第一个和最后一个数3 将数据计算放到同一线程计算4 替换槽函数5 修改传值为const6 神奇的环境因素7 更神奇的板子差异8 另一个细节Aborted最后关键字&#xff1a; Qt、 Aborted、 corrupted、 double、 linked 摘要 额&#xff0c;结论&…

【上位机入门常见问题】SQLServer2019 安装指导

SQLServer2019 安装指导 这里要说一下SQLServer的版本问题&#xff0c;首先说纵向的高低版本&#xff0c;如果大家跟我学习&#xff0c;我教给大家的是T-SQL编程的方法&#xff0c;而不是直接操作菜单的方法&#xff0c;所以&#xff0c;我们学习中只要使用SQLServer2012或以上…

嵌入式学习笔记——STM32单片机开发前的准备

STM32单片机开发前的准备1.集成开发环境的选取STM32 CubeIDEKEIL_MDK2.KEIL_MDK环境搭建安装包获取及安装芯片包下载及安装工程建立(STM32F407VET6为例)1.新建工程文件夹2.新建工程3.安装ST-LINK以及CH340的驱动4.设置KEIL&#xff0c;并烧录本文重点1.集成开发环境的选取 前面…

深入分析Vert.x里Future的compose() 和 map()

Vert.x 是一个异步框架。因此&#xff0c;它需要一种方法来表示可能尚未准备好但将来可用的值&#xff0c;也称为延迟值(deferred values)。您可能熟悉不同名称的延迟值&#xff1a;Promise, Future, Deferred, Mono, Uni 都是延迟值设计模式的实现。 Vert.x 有自己的延迟值实…

IP 地址类型有哪些?

IP 地址有不同的类别&#xff0c;每个类别内有不同的类型。消费者 IP 地址具有互联网服务计划的每个个人或企业都将拥有两种类型的 IP 地址&#xff1a;专用 IP 地址和公共 IP 地址。术语“公共”和“专用”与网络位置有关 - 即&#xff0c;在网络内部使用专用 IP 地址&#xf…

【C++】30h速成C++从入门到精通(内存管理、函数/类模板)

C内存分布我们先来看一下下面的一段代码相关问题int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char* pChar3 "abcd";int* ptr1 (int*)mal…

离线数据仓库项目搭建——准备篇

文章目录&#xff08;一&#xff09;什么是数据仓库&#xff08;二&#xff09;数据仓库基础知识&#xff08;三&#xff09;数据仓库建模方式&#xff08;1&#xff09;星行模型&#xff08;2&#xff09;雪花模型&#xff08;3&#xff09;星型模型 VS 雪花模型&#xff08;四…

【iobit 软件】家族系列 - 正版激活码

装机必备iobit系列软件 - 激活码获取看最后 第一款、Advanced SystemCare 16 您需要的人工智能驱动的PC优化器&#xff0c;以释放磁盘空间&#xff0c;加速PC并保护在线隐私。 功能特点&#xff1a; 1. 系统清理与优化&#xff1a;通过清除系统垃圾文件、注册表信息、无用文…

智能微型断路器在某银行网点的设计与应用

安科瑞 耿敏花【摘要】&#xff1a;随着人工智能、移动互联等现代信息技术和通信技术在电力行业的应用&#xff0c;实现电力系统各个环节人机交互、万物互联&#xff0c;打造状态全方面感知、信息合理处理、应用便捷灵活的泛在电力物联网已成为必然趋势 。本文主要对智能微型断…

后羿采集器快速入门----一款没有编程经验也能轻松使用的数据采集软件

后羿采集器快速入门 一、前言 不知道大家有没有苦恼于如何快速获取网页上的数据&#xff1f;想要进行大量重复性的操作但又要花费大量时间经历学习爬虫&#xff0c;这对于没啥编程基础的朋友们来说简直太不友好了&#xff01;那么有没有一个软件&#xff0c;能够通过傻白甜式…

【设计模式】代理模式

代理模式 为某个对象提供一种代理&#xff0c;以控制其他对象对这个对象的访问。属于结构型模式。 某些情况下&#xff0c;一个对象A不适合或者不能引用、直接访问某个对象B&#xff0c;而代理对象可以在客户端A和目标对象B之间起到中介作用 代理模式主要有三个重要角色: 抽…

【推拉框-手风琴】vue3实现手风琴效果的组件

简言 在工作时有时会用到竖形手风琴效果的组件。 在此记录下实现代码和实现思路。 手风琴实现 结构搭建 搭建结构主要实现盒子间的排列效果。 用flex布局或者其他布局方式将内容在一行排列把每一项的内容和项头用盒子包裹&#xff0c; 内容就是这一项要展示的内容&#xf…

python16行代码获取原神全角色+全语音

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 本来是不玩原神的&#xff0c;但是实在是经不住双重诱惑呀~ 毕竟谁能拒绝角色风景超级好看又可以爬树、炸鱼、壶里造房子、抓小动物、躲猫猫的游戏捏~ 今天点进官网~角色得配音让我沉陷其中&#xff0c;于是 我决定把他们爬…

数据库可视化开发工具内容介绍

在现代化办公环境中&#xff0c;数据管理的重要性不言而喻。对于企业来说&#xff0c;将企业内部的数据做好规划和管理&#xff0c;可以给企业提升办公协作效率&#xff0c;为企业高层做出正确的经营决策奠定基础。本文主要给大家介绍的是数据化可视化开发工具的内容&#xff0…

狂神Springmvc,404,500错误解决办法(灵)

b站狂神springmvc404&#xff0c;500解决办法 首先校验各个文件是否正确 配置web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSche…

HLS协议有哪些特别优势

阿酷TONY / 2023-3-3 / 长沙 可以实现码率的动态自适应&#xff0c;清晰度动态成为可能&#xff1b;HLS是基于HTTP 协议的&#xff0c;更易于做各平台的适配与兼容&#xff1b;多终端跨平台的支持性&#xff1a; PC端, Android端, IOS 平台&#xff0c;微信之类的都支持&am…

C++中邻接矩阵、邻接表、链式前向星具体用法及讲解

图论在提高组中几乎占据半壁江山&#xff0c;而今天要讲的就是如何存储一个图一.邻接矩阵原理要建立一个图&#xff0c;根本的要素就是边和点而想要让计算机存储边和点就需要用到一些数据结构邻接矩阵是最简单的他使用了一个二维数组&#xff0c;来表示一个图假设数组名为map那…

彻底搞清楚内存泄漏的原因,如何避免内存泄漏,如何定位内存泄漏

作为C/C开发人员&#xff0c;内存泄漏是最容易遇到的问题之一&#xff0c;这是由C/C语言的特性引起的。C/C语言与其他语言不同&#xff0c;需要开发者去申请和释放内存&#xff0c;即需要开发者去管理内存&#xff0c;如果内存使用不当&#xff0c;就容易造成段错误(segment fa…