[补题记录] Educational Codeforces Round 160 (Rated for Div. 2)(A~C)

2023-12-19

URL: https://codeforces.com/contest/1913/problem/D

目录

A

Problem/题意

Thought/思路

Code/代码

B

Problem/题意

Thought/思路

Code/代码

C

Problem/题意

Thought/思路

Code/代码


A

Problem/题意

给一个长度最长为 8 的字符串,将其分割成两部分,求是否存在无前导零的两个数 a、b,且 a < b。

Thought/思路

模拟。

Code/代码

#include "bits/stdc++.h"

void solve() {
	std::string s; std::cin >> s;

	bool flag = false;
	for (int i = 1; i < s.length(); ++ i) {
		int a = std::stoi(s.substr(0, i));
		int b = std::stoi(s.substr(i, s.length() - i));
		if (a < b and s[i] != '0') {
			std::cout << a << " " << b << "\n";
			flag = true;
			break;
		}
	}

	if (!flag) {
		std::cout << "-1\n";
	}
}

signed main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0); std::cout.tie(0);
	int t; std::cin >> t;
	while (t--) solve();
	return 0;
}

B

Problem/题意

给一个 01 字符串 s,进行下面两个操作:

  • 删除 s 中任意一个字符,代价为 1;
  • 交换 s 中任意两个字符,代价为 0;

操作后获得字符串 t,问最小的操作代价,能使得 t 的每一位不等于 s 的每一位。

Thought/思路

因为删除 s 中的字符后,得到的 t 会变短,所以我们最后一定是考虑 前某几位。

那么就可以先保证前面的字符相反,当遇到某个字符,没有足够的 0 或 1 可以填补时,就说明最长的 t 就到这了。

Code/代码

#include "bits/stdc++.h"

void solve() {
	std::string s; std::cin >> s;

	int n1 = 0, n0 = 0;
	for (int i = 0; i < s.length(); ++ i) {
		if (s[i] == '1') n1 ++;
		if (s[i] == '0') n0 ++;
	}

	std::string t = "";
	for (int i = 0; i < s.length(); ++ i) {
		if (s[i] == '0') {
			if (n1 > 0) {
				t += "1";
				n1 --;
			} else {
				t += "0";
				n0 --;
			}
		} 
		if (s[i] == '1') {
			if (n0 > 0) {
				t += "0";
				n0 --;
			} else {
				t += "1";
				n1 --;
			}
		}
	}

	int ans = 0;
	for (int i = 0; i < s.length(); ++ i) {
		if (s[i] == t[i]) {
			ans = s.length() - i;
			break;
		}
	}

	std::cout << ans << "\n";
}

signed main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0); std::cout.tie(0);
	int t; std::cin >> t;
	while (t--) solve();
	return 0;
}

C

Problem/题意

给一个空的可重复集合,有 2 种询问:

ADD v,向集合中添加 pow(2, v);

GET w,询问集合中是否有子集可以求和等于 w;

Thought/思路

由 v 的范围可以想到需要从位来分析。

一个基础的想法是,要满足 w 能求和出来,则 w 的每一位为 1 的位置,集合中必须要有数在这一位为 1。

那么问题就是,当处理了第 i 位后,怎么做出 i + 1 等等更高位的判断。

我们只需要在处理完第 i 位后,将第 i 位多余的 1,进位到 i + 1 位,这代表着 i + 1 位可以的得到这么多的补充,这样就可以保证,某一位一定是基于最优的情况下去判断的。

Code/代码

#include "bits/stdc++.h"

int num[31];

void solve() {

	int t, v; std::cin >> t >> v;
	if (t==1) {
		int value = std::pow(2, v);
		for (int i = 0; i < 30; ++ i) {
			int k = (value >> i) & 1;
			if (k == 1) num[i] ++;
		}
	}
	
	if (t==2){
		bool flag = true;
		std::vector <int> tmp(31, 0);
		for (int i = 30; i >= 0; -- i) {
			tmp[i] = num[i];
		}
		for (int i = 0; i < 30; ++ i) {
			int k = (v >> i) & 1;
			if (k == 1) {
				if (tmp[i] >= 1) {
					tmp[i] --;
				} else {
					flag = false;
					break;
				}
			}
			tmp[i + 1] += tmp[i] / 2; // 给下一位增加
		}
		if (flag) std::cout << "YES\n";
		else std::cout << "NO\n";
	}
}

signed main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(0); std::cout.tie(0);
	int t; std::cin >> t;
	while (t--) solve();
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[补题记录] Educational Codeforces Round 160 (Rated for Div. 2)(A~C) 的相关文章

  • 如何从 C# 中的 dataTable.Select( ) 查询中删除单引号?

    所以我有一个经销商名称列表 我正在我的数据表中搜索它们 问题是 一些傻瓜必须被命名为 Young s 这会导致错误 drs dtDealers Select DealerName dealerName 所以我尝试替换字符串 尽管它对我不起作
  • 如何捕获未发送到 stdout 的命令行文本?

    我在项目中使用 LAME 命令行 mp3 编码器 我希望能够看到某人正在使用什么版本 如果我只执行 LAME exe 而不带参数 我会得到 例如 C LAME gt LAME exe LAME 32 bits version 3 98 2
  • 以编程方式读取 SQL Server 查询计划建议的 SQL 特定执行的索引?

    如果我在 SSMS 中运行此命令 set showplan xml on GO exec some procedure arg1 arg2 arg3 GO set showplan xml off GO 我获得查询执行中涉及的完整调用堆栈的
  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 为什么从字典中获取时会得到 Action<> 的克隆?

    我有以下字典 private Dictionary
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 如何减少具有多个单元的 PdfPTable 的内存消耗

    我正在使用 ITextSharp 创建一个 PDF 它由单个 PdfTable 组成 不幸的是 对于特定的数据集 由于创建了大量 PdfPCell 我遇到了内存不足异常 我已经分析了内存使用情况 我有近百万个单元格的 1 2 在这种情况下有
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • 20231219_101701 java io演练 功能演练 保存学生姓名到记事本

    需求 程序启动后 向用户询问学生姓名 如果输入的内容是s 就保存并退出 当程序结束后 把所有的输入的学生姓名 保存到名为students txt的记事本中 一个学生的名字占一行 分析 因为接收的是中文名字 所以建议使用字符流 我们随意选择一
  • 【数据结构和算法】 K 和数对的最大数目

    其他系列文章导航 Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一 题目描述 二 题解 2 1 方法一 双指针排序 三 代码 3 1 方法一 双指针排序 3
  • 20231219_093920 java 字符流写数据 FileWriter

    说明 FileWriter比起FileOutputWriter要更加好用 后者使用的时候还需要一个FileOutputStream对象 前者直接使用 示例 定义对象 FileWriter fileWriter new FileWriter
  • 比 style gan 更好的 style gan2

    上一篇博客介绍了 style gan 原理 但是 style gan 的结果会有水珠伪影 作者实验后发现是 Adain 导致的 AdaIN对每一个feature map的通道进行归一化 这样可能破坏掉feature之间的信息 当然实验证明发
  • 【工具库推荐】小程序一款阳历阴历(农历)日历组件

    展示 使用方法 组件目录如上图 调用如下图 第一步 在pages rl index json中设置引用这个日历组件 代码如下 第二步 在需要调用页面wxml文件中引用这个日历组件 并绑定相应的属性 如下图 属性解释 showDatePick
  • 策略模式在数据接收和发送场景的应用

    其他系列文章导航 Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一 策略模式改进 1 1 策略模式的定义 1 2 策略模式的结构通常包括以下组成部分 1 3
  • C/C++编程:令人印象深刻的高级技巧案例

    C C 编程语言在软件开发领域有着悠久的历史 由于其高效 灵活和底层访问能力 至今仍然被广泛应用 本文将介绍一些在C C 编程中令人印象深刻的高级技巧 帮助读者提升编程水平 更加高效地使用这两种强大的编程语言 一 指针运算与内存管理 C C
  • 高可用:如何实现消息队列的 HA?

    管理学上有一个木桶理论 一只水桶能装多少水取决于它最短的那块木板 这个理论推广到分布式系统的可用性上 就是系统整体的可用性取决于系统中最容易出现故障 或者性能最低的组件 系统中的各个组件都要进行高可用设计 防止单点故障 消息队列也不例外 本
  • 开源Cloudreve云盘系统源码/ 支持本地储存+对接各大对象储存/带云盘系统安装教程/公私兼备网盘系统

    源码介绍 Cloudreve云盘系统源码 它不仅支持本地储存 而且还对接各大对象储存 附带云盘系统安装教程 轻松搭建个人网盘 拥有美观界面 云盘系统安装教程 公私兼备网盘系统 多功能仿百度网盘源码 测试环境 PHP7 1 MYSQL5 6
  • 20231219_095713 java 字符缓冲输出流 BufferedWritter

    示例 关闭资源的时候 先关缓冲流 再关字符流 定义字符缓冲输出流对象 FileWriter fileWriter new FileWriter b txt BufferedWriter bufferedWriter new Buffered
  • 聊聊如何实现热插拔AOP

    前言 之前偶然看到一篇文章 利用aop实现热拔插 类似于插件 里面的实现挺好玩 今天我们也来玩一把 前置知识 Advice org aopalliance aop Advice 通知 表示 Aspect 在特定的 Join point 采取
  • 题解 | #输出某一年的各个月份的天数#

    三方寄过去了 告诉我停止24届招聘 全部毁约 牛的 he芯 毁约应届生 34316 广西北部湾银行2022年校园招聘 广西北部湾银行股份有限公司2022届校园招聘 看终端大把大把15级的 这个14级是不是终端bg的白菜了 程序员面试六战六捷
  • 永久删除的文件如何恢复?这3个简单方法可以帮到你!

    我在清理电脑的过程中 一不小心就删除了一些很重要的文件和数据 很想通过某种方法将这些数据找回来 但是不知道应该如何操作 有朋友可以分享一下文件找回的简单方法吗 在日常生活和工作中 我们时常会遇到误删重要文件的情况 一旦文件被永久删除 很多人
  • Mybatis配置-插件(plugins)

    MyBatis允许在映射语句执行的某些点拦截方法调用 默认情况下 MyBatis允许插件拦截以下方法调用 Executor update query flushStatements commit rollback getTransactio
  • 我的创作纪念日365

    机缘 提示 可以和大家分享最初成为创作者的初心 例如 实战项目中的经验分享 日常学习过程中的记录 通过文章进行技术交流 收获 提示 在创作的过程中都有哪些收获 例如 获得了多少粉丝的关注 获得了多少正向的反馈 如赞 评论 阅读量等 认识和哪
  • linux网络版计算机

    文章目录 前言 一 网络版计算机 1 序列化与反序列化 2 网络版计算机实现 3 守护进程 4 json格式 前言 一 网络版计算机 1 序列化与反序列化 协议是一种 约定 sock
  • 评分卡在数字化时代的应用与比较,谁是最强规则引擎?

    在数字化时代 规则引擎在各种业务场景中发挥着越来越重要的作用 评分卡作为规则引擎的一个重要应用 被广泛应用于员工KPI考核 业务评估 授信额度计算等等场景 本文引用了奔跑的小武哥的内容 对市面上的几个规则引擎进行对比展示 就小武哥整理的内容
  • 【开题报告】基于SpringBoot的企业财务管理系统的设计与实现

    1 研究背景 随着全球经济的发展和市场竞争的加剧 企业财务管理变得越来越重要 企业需要一个高效 精确 安全的财务管理系统来管理企业的财务事务 提供准确的财务数据支持决策制定 传统的手工财务管理方式已经无法满足企业的需求 因此 开发一款基于现
  • Error: error:0308010C:digital envelope routines::unsupported

    报错 ERROR Error error 0308010C digital envelope routines unsupported 打开 IDEA 终端 直接输入 env NODE OPTIONS openssl legacy prov
  • [补题记录] Educational Codeforces Round 160 (Rated for Div. 2)(A~C)

    URL https codeforces com contest 1913 problem D 目录 A Problem 题意 Thought 思路 Code 代码 B Problem 题意 Thought 思路 Code 代码 C Pro