AtCoder Beginner Contest 372(C++实现)

news2024/9/24 16:34:42

比赛链接:Tasks - UNIQUE VISION Programming Contest 2024 Autumn (AtCoder Beginner Contest 372)

文章目录

  • A-delete
    • 问题陈述
    • 思路
    • 代码
  • B - 3^A
    • 问题陈述
    • 思路
    • 代码
  • C - Count ABC Again
    • 问题陈述
    • 思路
    • 代码
  • D - Buildings
    • 问题陈述
    • 思路
    • 代码

A-delete

问题陈述

给你一个由小写英文字母和 . 组成的字符串 SS 。请找出从 SS 中删除所有 . 后得到的字符串。

思路

创建一个字符串来存储输入信息,在再创建一个字符串来存储除字符.外的所有字符。

代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s;
	cin >> s;
	string ans;
	for (int i = 0; i < s.size(); ++i) {
		if (s[i] != '.') {
			ans += s[i];
		}
	}
	cout << ans;
	return 0;
}

B - 3^A

问题陈述

给你一个正整数 M M M 。求满足以下所有条件的正整数 N N N 和非负整数序列 A = ( A 1 , A 2 , … , A N ) A = (A_1, A_2, \ldots, A_N) A=(A1,A2,,AN)

  • 1 ≤ N ≤ 20 1 \le N \le 20 1N20
  • 0 ≤ A i ≤ 10 0 \le A_i \le 10 0Ai10 ( 1 ≤ i ≤ N ) (1 \le i \le N) (1iN)
  • ∑ i = 1 N 3 A i = M \displaystyle \sum_{i=1}^N 3^{A_i} = M i=1N3Ai=M

可以证明,在约束条件下,总是存在至少一对满足条件的 N N N A A A

思路

因为M一定是由许多不同的3的幂得到的,也就说明了M一定是3的倍数,然后我们又可以知道,3的1次方会等于,3个3的0次方,以此往后类推,我们就可以得到,3的n次方会等于3个3的n-1次方。这就告诉了我们应该尽量去求3的高次幂,也就是贪心,我们从3的高次幂来往前推。
如果M可以由这个3的幂组成,就把该幂次存入数组。反之就降低幂次。

代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int m;
int main()
{
	cin >> m;
	//N [1,20];
	//a [0,10]
	//逆向思维
	int num = m;
	int ans_n = 0;
	vector<int> ans_v;
	int x = 10;
	while (num > 0) {
		int tmp = num - pow(3, x);
		if (tmp >= 0){
			ans_n += 1;
			ans_v.push_back(x);
			num = tmp;
		}
		else {
			if(x!=0)
				x -= 1;
		}
	}
	//因为我们是从后往前求,所以需要逆置一下
	reverse(ans_v.begin(), ans_v.end());
	cout << ans_n << endl;
	for (int i = 0; i < ans_v.size(); ++i) {
		cout << ans_v[i] << ' ';
	}
	return 0;
}

C - Count ABC Again

问题陈述

给你一个长度为 N N N 的字符串 S S S 。同时还给了你 Q Q Q 个查询,你应该按顺序处理这些查询。

i i i -th 查询如下:

  • 给定一个整数 X i X_i Xi 和一个字符 C i C_i Ci ,用 C i C_i Ci 替换 S S S 中的 X i X_i Xi -th 字符。然后,打印字符串 ABC 作为子串出现在 S S S 中的次数。

这里, S S S子串是指从 S S S 的开头删除零个或多个字符,从结尾删除零个或多个字符后得到的字符串。
例如,ababc的子串,但ac不是abc的子串。

思路

因为要求的是字串而且还固定了,那么求子串的操作就很简单了。直接遍历字符串,每次往取3个字符进行比较就可以了,这样的话,我们就求出了最初版本的字串数量num了。
不过这题的重点肯定不是求字串。因为字符串每次都会变一个字符,每次都重新求的话,程序会超时的。为了防止超时,肯定要做一些策略。
可以知道的是,每一次都只会改变一个,那么这个字符影响的范围就固定了,取极限情况,该字符会影响的范围,只要它的前两个字符和后两个字符。也就是说,加上自己该字符会影响5个字符的范围,为此我们每次只需要检查这5个字符。如果改变字符导致目标子串出现j就让num+1,反之num-1,就考虑到越界情况,加个判断就可以了。

代码

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int n, t;
int func(string& s, const string& tmp) {
	int ans = 0;
	for (int i = 0; i < n; ++i) {
		if (s.substr(i, 3) == tmp) {
			ans += 1;
		}
	}
	return ans;
}
int main()
{
	cin >> n >> t;
	string s;
	cin >> s;
	int num = func(s, "ABC");
	while (t--) {
		int x;
		char c;
		string tmp = s;
		cin >> x;
		x -= 1;
		cin >> c;
		s[x] = c;
		for (int i = 0; i <= 2 && x - i >= 0; ++i) {
			if (s.substr(x - i, 3) == "ABC" && tmp.substr(x - i, 3) != "ABC") {
				num += 1;
			}
			else if (s.substr(x - i, 3) != "ABC" && tmp.substr(x - i, 3) == "ABC") {
				num -= 1;
			}
		}
		for (int i = 1; i <= 2 && x + i < n; ++i) {
			if (s.substr(x + i, 3) == "ABC" && tmp.substr(x + i, 3) != "ABC") {
				num += 1;
			}
			else if (s.substr(x + i, 3) != "ABC" && tmp.substr(x + i, 3) == "ABC") {
				num -= 1;
			}
		}
		cout << num << endl;
		
	}
	return 0;
}

D - Buildings

问题陈述

N N N 幢楼房,依次为 1 1 1 幢、 2 2 2 幢、 … \ldots 幢、 N N N 幢。 i i i 号楼的高度为 ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1iN) ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1iN) 的高度为 H i H_i Hi.。

求每个 i = 1 , 2 , … , N i = 1, 2, \ldots, N i=1,2,,N 的整数 j j j ( i < j ≤ N ) (i < j \leq N) (i<jN) 的个数。 ( i < j ≤ N ) (i < j \leq N) (i<jN) 满足下列条件:

  • 在建筑物 i i i j j j 之间没有比建筑物 j j j 高的建筑物。

思路

要求为建筑物i和j间没有比建筑物j高的建筑物数量(不包括i),为此我们可以用单调栈来解决问题。创建一个栈,从后往前遍历数组,不过是从倒数第2个元素开始,因为最后一个元素对应的值一定是0。但是我们比较时要让i+1
这样的话,算法的逻辑就出来了,当栈不为空时,就循环比较,如果栈顶元素小于v[i+1]就出栈。如此一来就可以保证i到j内的数没有比v[j]大的元素。循环结束后要让v[i+1]入栈,因为出了最后一个元素,其他的每个元素保底都有一个相邻的元素满足条件。最后每个v[i]对应的答案就是当前栈中元素的个数。

代码

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<int> v(n+1);
	for (int i = 1; i <= n; ++i) {
		cin >> v[i];
	}
	//要求为建筑物i和j间没有比建筑物j高的建筑物数量
	//单调栈?
	stack<int> st;
	vector<int> ans(n + 1);
	for (int i = n - 1; i >= 1; --i) {
		while (!st.empty() && v[st.top()] < v[i + 1]) {
			st.pop();
		}
		st.push(i + 1);
		ans[i] = st.size();
	}
	for (int i = 1; i <= n; ++i) {
		cout << ans[i]<<' ';
	}
	return 0;
}

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

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

相关文章

代码随想录算法训练营第三十八天 | 322. 零钱兑换,279.完全平方数,139.单词拆分,多重背包

322.零钱兑换 题目链接 解题过程 递推公式写对了&#xff0c;但对于特殊情况的案例没有想清楚&#xff0c;如不能凑成则需返回-1dp[i] min(dp[i], dp[i - coin] 1); 完全背包 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector…

SSM影院订票系统—计算机毕业设计源码35370

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个SSM影院订票系统&#xff1b;订票系统的管理工作系统化、规范化&#xff0c;也会提高平台形象&#xff0c;提高管理效率。 本影院订票系…

11周年 | 初心不改,焕新前行,奔赴下一个10年!

2024年8月13日&#xff0c;爱加密正式迎来了11岁生日&#xff0c;在爱加密肩负着崇高使命踏浪而行的10年间&#xff0c;蓝绿色的品牌标识一直伴于左右。随着时代的变迁以及市场需求的不断变化&#xff0c;企业同样也需要在品牌上做出创新递进&#xff0c;从而更加适应市场竞争的…

AI知识库助力电商企业打造精准营销策略

在数字化时代&#xff0c;电商行业的竞争日益激烈&#xff0c;消费者需求的多样化和个性化趋势愈发明显。为了在这场没有硝烟的战争中脱颖而出&#xff0c;电商企业纷纷借助人工智能技术&#xff0c;特别是AI知识库&#xff0c;来打造更加精准、高效的营销策略。本文将深入探讨…

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值&#xff0c;比如内网ip、hostame&#xff0c;每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。实操演示 例&#xff1a;定义一个local_ip的命名空间变量…

单利复利计算器使用方法

单利复利计算器使用方法 背景 这个工具主要是小部分人用&#xff0c;因为以前要算个单利复利的时候&#xff0c;搜索出来的工具上来就要获取你的手机号&#xff0c;进去之后再收费。如果使用频繁的话&#xff0c;可以购买他们的更多服务&#xff0c;产品功能更多更完善。偶尔…

年轻用户对Facebook的使用趋势分析

在社交媒体的蓬勃发展中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;尽管面临着来自新兴平台的竞争&#xff0c;仍然在年轻用户中扮演着重要角色。然而&#xff0c;年轻用户对Facebook的使用方式和趋势却在不断变化。本文将探讨年轻用户对Facebook的使用趋势&a…

性能测试工具——JMeter

目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一&#xff1a; 方式二&#xff1a; 3、JMeter基础设置 4、JMeter基本使用流程 &#xff08;1&#xff09;启动JMeter &#xff08;2&#xff09;在测试计划下添加线程组 &#xff08;3&#xff09;在 “线…

防止企业数据泄露 | 信息数据电脑保护系统 | 天锐DLP数据安全

在当今这个高度信息化的时代&#xff0c;数据已跃升为企业运营不可或缺的核心战略资源&#xff0c;而面对企业内部终端上海量的数据信息&#xff0c;及时、准确地识别出重要的敏感数据是一项关键任务&#xff0c;它直接关系到企业的数据安全、合规性以及业务风险的控制。 【地址…

鸿蒙HarmonyOS NEXT系统揭秘:跨端迁移与多端协同

随着科技的飞速发展&#xff0c;万物互联的时代已经悄然来临。 在这个背景下&#xff0c;华为鸿蒙HarmonyOS NEXT系统的最新动向无疑成为了业界关注的焦点。 近日&#xff0c;关于鸿蒙操作系统将多设备协同功能细分为“跨端迁移”与“多端协同”的消息不胫而走&#xff0c;这…

基于单片机的太阳能热水器控制系统的研究-设计说明书

设计摘要&#xff1a; 本研究旨在设计和实现基于单片机的太阳能热水器控制系统。太阳能热水器是一种有效利用太阳能来加热水的设备&#xff0c;在节能和环保方面具有显著的优势。本研究通过使用单片机技术&#xff0c;将传统的太阳能热水器与智能控制相结合&#xff0c;提高了…

QT 中的信号与槽机制详解

目录 一、引言 二、信号与槽的基本概念 1.信号&#xff08;Signals&#xff09; 2.槽&#xff08;Slots&#xff09; 三、声明信号和槽 1.声明信号和槽 2.发射信号 3.连接信号和槽 四、高级特性 1.多信号连接到一个槽 2.一个信号连接到多个槽 3.断开信号和槽的连…

多融合的信息收集工具--Mitan

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

北京市朝阳区自闭症寄宿学校:为孩子提供优质照顾与学习环境

北京市朝阳区自闭症寄宿学校的愿景与广州星贝育园的卓越实践 在北京市朝阳区&#xff0c;乃至全国范围内&#xff0c;自闭症儿童的教育与照护一直是社会各界关注的焦点。家长们渴望为孩子找到一所能够提供优质照顾与学习环境的学校&#xff0c;让他们在爱与专业的滋养下茁壮成…

trl中的PPO代码解析(炒冷饭版)

不说其他的解释&#xff0c;上来就看代码。建议先对PPO的整体流程有了解。 trl的版本为0.4.0&#xff0c;注&#xff1a;【新版的trl中代码更复杂&#xff0c;如果只是想读懂PPO具体怎么用trl实现的&#xff0c;0.4.0版本即可】 step1: rollout ppo_trainer.generate()函数…

从入门到精通:QT 100个关键技术关键词

Qt基础概念 Qt Framework - 一个跨平台的C图形用户界面应用程序开发框架。它不仅提供了丰富的GUI组件&#xff0c;还包括网络、数据库访问、多媒体支持等功能。 Qt Creator - Qt官方提供的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了代码编辑器、项目管理工具、…

2024年AI技术爆发的元年,用对工具,让你副业比主业赚得多!

大家好&#xff0c;我是强哥 文字的力量不容小觑&#xff0c;或许你没有多好的文笔&#xff0c;或许你已经很久没有拿笔写字了&#xff0c;但是没关系&#xff0c;我们有工具&#xff01; AI时代的到来&#xff0c;不会用工具&#xff0c;那你可就OUT了 如果你觉得文字不能赚…

Convert excel format exception.You can try specifying the ‘excelType‘

在使用easyexcel读取文件流获取集合的时候报了这个错 在点进代码抛出异常的地方&#xff0c;发现这么一段逻辑 是通过文件流的前8个字节来判断文件的类型&#xff0c;实际上这种判断规则是无法保证准确的。然后自然的想到是不是引入的jar包版本太旧了&#xff0c;所以有这个b…

Axure大屏可视化模板:跨领域数据分析平台原型案例

随着信息技术的飞速发展&#xff0c;数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具&#xff0c;其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例&#xff0c;展…

安全测试|如何使用burpsuite+xray实现联动测试

目的&#xff1a;安全测试过程中手动分析测试与xray自动化扫描测试结合&#xff0c;这样可以从多层保障安全测试的分析&#xff0c;针对平台业务接口量大的安全测试是十分有用的&#xff0c;可以实现双向测试同时开始。 1.xray 安装和使用 1.1 下载地址&#xff1a;xray commu…