首页 > 其他分享 >灵茶之贪心模拟01

灵茶之贪心模拟01

时间:2024-03-26 12:45:30浏览次数:24  
标签:10 01 花费 灵茶 int 变成 贪心

灵茶之贪心模拟01

题目链接

https://codeforces.com/problemset/problem/1443/B

题目大意

输入 T(≤\(10^5\)) 表示 T 组数据。所有数据的字符串长度之和 ≤ \(10^5\)。

每组数据输入 a(1≤a≤1000) b(1≤b≤1000) 和长度不超过 \(10^5\) 的 01 字符串。

你可以花费 a,把一段连续的 1 变成 0。

也可以花费 b,把一个 0 变成 1。

上述两种操作可以执行任意次。 输出把所有 1 都变成 0 的最小花费。

题目思路

  • 如果没有1,就直接输出0
  • 考虑这样的一部分:1110001111
    • 我们有两种方案
    • ①将两边连续的1花费a变成0,总花费为2a
    • ②将中间0花费 k * b 变成1,在花费a1变成0,总花费为 kb + a
    • 比较方案①与方案②,自然是选择总花费最小的方案了
  • 我们只需从左往右使用双指针[left,right],找到两段 1中间的那串0,考虑将这两段1合并成一段1的最小花费,再加上最后合并成的那一连串1的花费a即可

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n,a,b,t;
void solve() {
    string s;
    cin >> a >> b;cin >> s;
    n = (int)s.size();
    // s 里 不 包 含 0!
    if(s.find('1') == string::npos) {
        cout << 0 << '\n';
        return;
    }
    int ans = a;
    int right = 0,left;
    while(right < n){
        char x = s[right];
        left = right;
        while(right < n && s[right] == x) ++right;
        if(x == '0' && right < n){
            if(left == 0) continue;
            ans += min(b * (right - left),a);
        }
    }
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> t;
    for (int _ = 0; _ < t; _++) solve();
    return 0;
}

标签:10,01,花费,灵茶,int,变成,贪心
From: https://www.cnblogs.com/gebeng/p/18096406

相关文章

  • 前端学习-TypeScript-001-了解、安装TypeScript
    菜鸟教程链接TypeScript简介TypeScript是JavaScript的超集,扩展了JavaScript的语法,因此现有的JavaScript代码可与TypeScript一起工作无需任何修改,TypeScript通过类型注解提供编译时的静态类型检查。TypeScript可处理已有的JavaScript代码,并只对其中的TypeScript......
  • citect2018R2学习笔记:Citext.textbox控制字体
    新浪那边的审查真的严格,一晚上了,一篇学习笔记还是没有过审,在这里也发表一次吧。前两天群里面有个哥们咨询怎么控制Citext.textbox控件的字体,我尝试着做了练习,还是比较简单的。假设Citext.textbox控件编号是AN4,写下面的脚本:FUNCTIONCitext_Fontini()OBJECTcitextcitext=Obje......
  • 01-【HAL库】STM32实现串口打印
    一、什么是串口串口通讯(SerialCommunication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和片......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧001
    PDF格式公众号回复关键字:ZKYD001阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 2017 各省省选做题笔记
    AHOI/HNOID1T1单旋不会哦,感觉这题最难。D1T2影魔考虑计算每个位置作为\([l+1,r-1]\)中的最大值时的贡献,一定是有一端取到了左边第一个比自己大的或者右边第一个比自己大的,可以用单调栈求出所有的有效点对,是线性的,然后做一遍二维数点即可。D1T3礼物首先考虑不做修......
  • AGC018C Coins 题解
    模拟费用流。传送门题意:共\(n=x+y+z\)个人,每个人可以选择获得\(a_i\)个金币或\(b_i\)个银币或\(c_i\)个铜币。要选\(x\)个人拿金币,\(y\)个人拿银币,\(z\)个人拿铜币。问币数总和最大是多少。\(n\le10^5\)。先建出费用流模型:把一个人的选择视作一个人流到了金币/......
  • P1525 [NOIP2010 提高组] 关押罪犯
    带权并查集中,dist[]数组可以理解为一个向量,这样子比按照距离来理解更透彻:优秀学习资料:AcWing240.食物链(带权并查集)-AcWing即d[a]表示向量a->fa[a]这道题的并查集解法:#include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>......
  • 01、路由策略简介
    路由策略简介定义:路由策略主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。目的:路由协议在发布、接收和引入路由信息时,根据实际组网需求实施一些策略,以便对路由信息进行过滤和改变路由信息的属性,如:控制路由的接收......
  • day01
    计算机五大组成部分:控制器、运算器、存储器、输入设备、输出设备。内存(内存条):优点:存取速度快,容量小。缺点:断电数据消失。外存(磁盘):优点:断电数据也不会丢失,可以永久保存数据,容量大。缺点:存取速度慢。cpu>内存>外存。解决cpu和内存存取速度差的问题:高速缓存。cpu里面有寄存器,存......
  • PowerEdgeR350 UEFI0116 错误
    早上接到小伙伴反馈一台DELL的R350服务器不能正常开机,接显示器后看到如下提示:按任意键后,如下提示:显示了服务器阵列卡H755回车后,如下提示:Please contact Technical Support to fix Multibit ECC errors noticed on the RAID controller.If youcontinue,data......