D. Binary String Sorting(枚举位置)

news2024/11/16 11:55:05

Problem - 1809D - Codeforces

给定一个仅由字符0和/或1组成的二进制字符串s。

您可以对此字符串执行几个操作(可能为零)。有两种类型的操作:

选择两个相邻的元素并交换它们。为了执行此操作,您需要支付1012硬币;
选择字符串中的任何元素并删除它。为了执行此操作,您需要支付1012 + 1个硬币。

您的任务是计算将字符串s排序为非递减顺序(即将s转换为s1≤s2≤⋯≤sm,其中m是应用所有操作后字符串的长度)所需的最小硬币数量。空字符串也被认为是已按非递减顺序排序的。

输入

第一行包含一个整数t(1≤t≤104)——测试用例数。

每个测试用例的唯一行包含字符串s(1≤|s|≤3⋅105),仅由字符0和/或1组成。

所有给定字符串的长度之和不超过3⋅105。

输出

对于每个测试用例,输出一个整数——将字符串s排序为非递减顺序所需的最小硬币数量。

Example

Input

Copy

 

6

100

0

0101

00101101

1001101

11111

Output

Copy

1000000000001
0
1000000000000
2000000000001
2000000000002
0

在第一个例子中,您需要删除第1个元素,使字符串变为00。

在第二个例子中,字符串已经排序。

在第三个例子中,您需要交换第2和第3个元素,使字符串变为0011。

在第四个例子中,您需要交换第3和第4个元素,使字符串变为00011101,然后删除第7个元素,使字符串变为0001111。

在第五个例子中,您需要删除第1个元素,使字符串变为001101,然后删除第5个元素,使字符串变为00111。

在第六个例子中,字符串已经排序。

题解:
我们可以枚举从哪一个位置开始,左边全为0,右边全为1

如果交换的次数超过1,是不如删除的

只有这种情况才会进行交换操作10

我们利用前缀和记录0出现的次数

对于每个位置,看多少0和1要被删除

对于交换的操作,其实最多就只有一次,看看位置如果符合减1即可

 

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
 #define int long long
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 4e5 + 10;
int mod = 1e9 + 7;
int cnt[N]; 
void solve()
{
	string s;
	cin >> s;
	int n = s.size();
	s = " " + s;
	for(int i = 1;i <= n;i++)
	{
		cnt[i] = cnt[i - 1] + (s[i] == '0');
	}
	int ans = 1e18;
	for(int i = 0;i <= n;i++)
	{
		int x = i - cnt[i];
		int y = cnt[n] - cnt[i];
		if(i != 0&&s[i] == '0'&&s[i - 1] == '1')
		{
			ans = min(ans,(int)(x+y)*(int)(1e12 + 1) - 1);
		}
		else
		{
			ans = min(ans,(int)(x + y)*(int)(1e12 + 1));
		}
	}
	cout << ans <<"\n";
}
signed main()
{
	ios::sync_with_stdio(0 );
	cin.tie(0);cout.tie(0);
	int t = 1;
	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

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

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

相关文章

网络作业10【计算机网络】

网络作业10【计算机网络】 前言推荐网络作业10一. 单选题&#xff08;共13题&#xff0c;68.2分&#xff09;二. 多选题&#xff08;共4题&#xff0c;21.2分&#xff09;三. 阅读理解&#xff08;共2题&#xff0c;10.6分&#xff09; 练习5-39 最后 前言 2023-6-23 15:35:39…

MySQL ----主从复制、分离解析

文章目录 一、MySQL 主从复制1.1服务性能扩展方式1.2 MySQL的扩展什么是读写分离&#xff1f; 1.3为什么要读写分离呢&#xff1f;1.4什么时候要读写分离&#xff1f;1.5主从复制与读写分离1.6mysql支持的复制类型1.7主从复制的工作过程1.8MySQL 读写分离原理1.9目前较为常见的…

2023年05月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

2023-05 Scratch四级真题 分数&#xff1a;100 题数&#xff1a;24 测试时长&#xff1a;90min 一、单选题(共10题&#xff0c;共30分) 1. 下列积木运行后的结果是&#xff1f;&#xff08;B&#xff09;&#xff08;说明&#xff1a;逗号后面无空格&#xff09;&#xff08…

考研算法29天:希尔排序 【希尔排序】

算法介绍 希尔排序 等差数列 普通版插入排序 循环数组 第一次每n/2为间隔分为4组&#xff0c;然后组内排序。 第二次每n/4为间隔分为2组。然后组内排序 第三次n/8为间隔分为一组。然后组内排序。 组内排序用插入排序来排序。 注&#xff1a;也可以第一次为n/3为间隔&am…

Elasticsearch:DSL Query

Query DSL的分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有的数据&#xff0c;一般测试用&#xff0c;例如&#xff1a;match_all&#xff0c;但有分页限制&#xff0c;一次20…

知乎网友问题:Android 悬浮窗怎么让窗口响应事件的同时,也能让背后挡住的地方收到事件?---腾讯课堂千里马亲自解答

问题&#xff1a;Android 悬浮窗怎么让窗口响应事件的同时&#xff0c;也能让背后挡住的地方收到事件&#xff1f; 点击悬浮窗&#xff0c;自己能收到事件&#xff0c;背后挡住的区域也要能收到&#xff0c;怎么实现&#xff0c;return. false 无效 原生android机制不支持原因…

【C++入门第五期】类和对象(中)

这里写目录标题 类的6个默认成员函数构造函数特征 析构函数概念特性 拷贝构造特征拷贝构造如何自定义 运算符重载赋值运算符重载赋值运算符重载前置和后置重载 取地址及const取地址操作符重载 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 class…

基于深度学习的高精度抽烟行为检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度抽烟行为检测识别系统可用于日常生活中或野外来检测与定位抽烟行为目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的抽烟行为目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5…

【五子棋实战】第6章 调用接口进行联调

【五子棋实战】第6章 调用接口进行联调 Ajax调用接口 调用五子棋接口 点击优化 尾声 更多待开发的功能 Ajax调用接口 引入Jquery&#xff0c;使用JQ封装的ajax&#xff0c;demo如下&#xff1a; <script src"jquery-3.5.0.min.js"></script> <…

无显示器玩转树莓派桌面版

title: 无显示器玩转树莓派桌面版 zhaoolee在Github开启了长篇连载《树莓派不吃灰》https://github.com/zhaoolee/pi 目前已经更新到18篇&#xff0c;主要是给树莓派刷Ubuntu当做家庭服务器用。 恰好手头还有一块闲置的树莓派4B &#xff0c;我打算深度玩一下树莓派桌面版&…

CODESYS电子齿轮同步MC_GearIn指令编程应用

MC_GearIn属于比例随动控制,有关比例随动控制详细介绍请参看下面文章: 运动控制比例随动系统_RXXW_Dor的博客-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U…

第十一章 EfficientNetv1网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

ffmpeg 音视频处理神器

1 FFmpeg是什么 ffmpeg是一套用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它包含了非常先进的音频/视频编解码库libavcodec&#xff0c;提供了录制、转换以及流化音视频的完整解决方案。 许多FFmpeg的开发人员都来自MPla…

AWS Lambda 介绍

计算服务的演进 EC2------Container-------Lambda 虚拟机---容器--------------serverless无服务器架构 什么是AWS Lambda&#xff1f; AWS lambda的核心是事件驱动&#xff0c;驱动可能来自&#xff0c;Alexa,SNS&#xff0c;DynamoDB&#xff0c;S3&#xff0c;Kinesis等&…

什么是队列?Python中如何使用队列(62)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是队列&#xff1f; 队列有哪些接口(api)&#xff1f; 在Python中如何表示队列&#xff1f; 什么是队列 队…

HDFS的工作原理是怎么样的?是如何实现HA模式?

原文链接&#xff1a;http://www.ibearzmblog.com/#/technology/info?id714dcb3957e29185493239b269a9ef65 前言 HDFS是能够提供一个分布式文件存储的系统&#xff0c;在大型数据文件的存储中&#xff0c;能够提供高吞吐量的数据访问&#xff0c;那么它是如何实现数据文件的…

电机调速执行

一、建立思维导图&#xff0c;将功能分析近而转换成技术要点&#xff0c;逐步实现。 二、编码器 1、机械编码器 &#xff08;1&#xff09;机械编码器是什么&#xff0c;张啥样&#xff1f; 如下图&#xff0c;这个就是我们生活应用中常见的机械编码器&#xff0c;我们又叫旋…

【C++】模板初阶——函数模板和类模板

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…

鲍威尔一句话,BTC冲破30000!币圈涨跌不再依赖美联储降息?

仅仅一夜&#xff0c;全球最大的加密货币比特币价格突破30000美元关键阻力位&#xff0c;最高突破至30800美元&#xff0c;创2023年4月以来的最高价。而美联储主席鲍威尔的证词&#xff0c;竟是这波行情的最大催化剂。 鲍威尔周三出席众议院金融服务委员会接受质询&#xff0c;…