洛谷 CF997A Convert to Ones
洛谷 CF997A Convert to Ones
题意翻译
给你一个长度为 nn 的01串( n \leq 310^5n*≤3∗105 ),你有两种操作:
1.将一个子串翻转,花费 XX
2.将一个子串中的0变成1,1变成0,花费 YY
求你将这个01串变成全是1的串的最少花费。
感谢@litble 提供翻译
题目描述
You've got a string a_1, a_2, \dots, a_na1,a2,…,a**n , consisting of zeros and ones.
Let's call a sequence of consecutive elements a_i, a_{i + 1}, \ldots, a_j ( 1\leq i\leq j\leq n ) a substring of string aa .
You can apply the following operations any number of times:
- Choose some substring of string aa (for example, you can choose entire string) and reverse it, paying xx coins for it (for example, «0101101» \to→ «0111001»);
- Choose some substring of string aa (for example, you can choose entire string or just one symbol) and replace each symbol to the opposite one (zeros are replaced by ones, and ones — by zeros), paying yy coins for it (for example, «0101101» \to→ «0110001»).
You can apply these operations in any order. It is allowed to apply the operations multiple times to the same substring.
What is the minimum number of coins you need to spend to get a string consisting only of ones?
输入格式
The first line of input contains integers nn , xx and yy ( 1 \leq n \leq 300,000, 0 \leq x, y \leq 10^9 ) — length of the string, cost of the first operation (substring reverse) and cost of the second operation (inverting all elements of substring).
The second line contains the string aa of length nn , consisting of zeros and ones.
输出格式
Print a single integer — the minimum total cost of operations you need to spend to get a string consisting only of ones. Print 00 , if you do not need to perform any operations.
输入输出样例
输入 #1复制
输出 #1复制
输入 #2复制
输出 #2复制
输入 #3复制
输出 #3复制
说明/提示
In the first sample, at first you need to reverse substring [1 \dots 2][1…2] , and then you need to invert substring [2 \dots 5][2…5] .
Then the string was changed as follows:
«01000» \to→ «10000» \to→ «11111».
The total cost of operations is 1 + 10 = 111+10=11 .
In the second sample, at first you need to invert substring [1 \dots 1][1…1] , and then you need to invert substring [3 \dots 5][3…5] .
Then the string was changed as follows:
«01000» \to→ «11000» \to→ «11111».
The overall cost is 1 + 1 = 21+1=2 .
In the third example, string already consists only of ones, so the answer is 00
题解:
我们要把01串变成1串,本质上是做什么?
最朴实的做法,是把所有0全部取反。
但是我们要求最小代价,所以这么裸着做肯定是不行。
所以我们开始认真看一下这个“翻转”操作。
什么时候我们用反转是比较优惠的呢?
就是,因为每次变化是不限量的,所以我们出于贪心考虑,一定是把这个串的0都归拢到一起,这样就可以用一次取反操作直接变成1串。
所以我们取反,其实就是归拢0的一个过程。
但是我们还会考虑这么一个问题:就是当我们的x比y大的话,取反就特别浪费。我们还莫不如直接把他们直接一段段取反,这样还会比反转后取反节约一点。
所以我们统计1之间夹0的段数,用long long 输出即可。
代码:
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define maxn 300001
using namespace std;
int cnt,n,x,y;
char str[maxn];
int main()
{
scanf("%d%d%d",&n,&x,&y);
scanf("%s",str+1);
str[0]='1';
for(int i=1;i<=n;i++)
if(str[i]=='0' && str[i-1]=='1')
cnt++;
if(cnt==0)
puts("0");
else
printf("%lld\n",(ll)(cnt-1)*min(x,y)+y);
return 0;
}
洛谷 CF997A Convert to Ones的更多相关文章
- 洛谷CF997A:Convert to Ones
温馨提示: 本题适合先思考再看题解,相信各位神犇都能轻轻松松过掉它. 题目链接: https://www.luogu.com.cn/problem/CF997A 分析: 首先要读懂题,to ones, ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
- 洛谷P1538迎春舞会之数字舞蹈
题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
随机推荐
- oracle--ORA-38760
01,ORA-38760: This database instance failed to turn on flashback 02,问题处理思路 第一步:查看日志文件 查看这次启动的时候alter ...
- Comet OJ - Contest #7 C 临时翻出来的题(容斥+状压)
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 ...
- 浅析容斥和DP综合运用
浅析容斥和DP综合运用 前言 众所周知在数数题中有一种很重要的计数方法--容斥.但是容斥有一个很大的缺陷:枚举子集的复杂度过高.所以对于数据规模较大的情况会很乏力,那么我们就只能引入容斥DP. 复习一 ...
- http与tcp,udp的区别
1.网络协议的概念 (1)在学习网络课程的时候,老师会讲iso七层模型,有应用层 表示层 会话层 传输层 网络层 数据链路层 物理层,其中http就属于应用层,tcp与udp是属于传输层,如图1.1( ...
- Spring69道面试题
Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring ...
- 初次用R的实际案例数据分析
这是一次教授布置的期末作业,也是书籍<商务数据分析与应用>的一个课后作业 目录 数据描述 数据预处理 描述性统计分析 模型分析(方差分析) 数据描述 非学位职业培训机构的178个学员的数据 ...
- .net 6.0 新特性
1. 属性初始化 class Person { public string Name { get; set; } public string Sex { get; set; } = "男&q ...
- topshelf注册服务
1.需要从nutget上获取toshelf配置 2.代码 using Common.Logging; using Quartz; using Quartz.Impl; using System; us ...
- 并发编程-线程,JMM,JVM,volatile
1.线程 相信大家对线程这个名词已经很不陌生了,从刚开始学习java就接触到线程,先说说进程吧,进程就是系统分配资源的基本单位,线程是调度cpu的基本单位,进程由线程组成,一个进程至少又一个线程组成, ...
- MySQL——数据库操作
1.创建数据库 登录MySQL服务后,使用create命令创建数据库 # 登录MySQL进入终端 mysql -u root -p # 之后输入命令 create database database_ ...