题目大意:给你几个数,这些数里面只有0或1,你有两种操作:1.把一段区域内的所有数前后交换位置。2.把一段区域内所有数取反。(区域可大可小,可以是所有数也                       可以只有一个数)。两个操作各有它的代价,你操作一次就要消耗一次代价,求把所有数都变成1所需要的最小代价。

输入:第一行输入n , ab, c :表示有n个数,操作1代价b,操作2代价c;

      第二行输入n个数,就是你要操作的数组。

输出:一行,输出最小代价。

题目分析:
1.如何运用操作1 :
 
我们可以通过操作1把所有的0聚到同一个区域内,再用操作2“一杆收”。
 
2.如何进行比较:
 
①需要几次操作:原来一共有n组0。(就是几个0处于同一个区域算作一个“组”),我们可以发现:每个1操作最多会使两个“0组”合并。(一次操作 1一定可以把两个不连通的“0组”变成一个大的“0组”,可以自己摸拟试试,确实是这样)每个2操作最多能消灭一个“0组”。所以我们一共需要n次操作,因为每种操作都相当于把“0组”的个数减少了1。
 
②操作1最多用几次:我们需要n-1次操作1把所有0聚在一起。然后我们需要1次操作2来把一组0给转化。此时操作1使用次数最多,代价 b*(n-1)+c。
 
③操作2最多用几次:把所有的“0组”全部转化即可,代价c*n。
   
 
  我们会发现,两者都是用了n次操作,所以c和b哪个小哪个多用就可以保证最终代价变小,所以最后结果就是min(b*(n-1)+c , c*n)。换言之:c和b有大小之分,而且一共使用的次数是一定的,那么肯定让代价少的操作尽可能多使用。
 
上代码!

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=3e5+10;//数据范围
int a[maxn];char s[maxn];
int n,b,c;
long long cnt;
int main(){
scanf("%d %d %d",&n,&b,&c);
scanf("%s",s);//输入是连着的数字,用一个字符串存
int i=0;
while(s[i]!='\0'){
a[i+1]=s[i]-'0';
i++;
}//把字符串转为整形数组
for(int i=1;i<=n;i++){
if(a[i]==0){
while(a[i]==0){
i++;
}//跳出循环时候,一个“0组”被遍历完毕。
cnt++;
}
}
//cnt表示有几个“0组”
if(cnt==0){
printf("0\n");
return 0;
}//如果这里不特判,(cnt-1)*b+c可能为负,结果就错了
printf("%lld\n",1ll*min(cnt*c,(cnt-1)*b+c));//cnt,b,c<3e6,cnt*c可能超过int范围

return 0;
}

Convert to Ones CodeForces(超水题)的更多相关文章

  1. CodeForces 519B A and B and Compilation Errors (超水题)

    这道题是超级水的,在博客上看有的人把这道题写的很麻烦. 用 Python 的话是超级的好写,这里就奉上 C/C++ 的AC. 代码如下: #include <cstdio> #includ ...

  2. Pearls in a Row CodeForces 620C 水题

    题目:http://codeforces.com/problemset/problem/620/C 文章末有一些测试数据仅供参考 题目大意 给你一个数字串,然后将分成几个部分,要求每个部分中必须有一对 ...

  3. 【Codeforces自我陶醉水题篇~】(差17C code....)

    Codeforces17A 题意: 有一种素数会等于两个相邻的素数相加 如果在2~n的范围内有至少k个这样的素数,就YES,否则就NO; 思路: 采用直接打表,后面判断一下就好了.那个预处理素数表还是 ...

  4. CodeForces 327B 水题。

    I - 9 Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  5. HDU 6066 17多校3 RXD's date(超水题)

    Problem Description As we all know that RXD is a life winner, therefore he always goes out, dating w ...

  6. Codeforces - 631B 水题

    注意到R和C只与最后一个状态有关 /*H E A D*/ struct node2{ int kind,las,val,pos; node2(){} node2(int k,int l,int v,i ...

  7. ytu 2558: 游起来吧!超妹!(水题,趣味数学题)

    2558: 游起来吧!超妹! Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][Web Board ...

  8. 水题 Codeforces Round #302 (Div. 2) A Set of Strings

    题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...

  9. 水题 Codeforces Round #300 A Cutting Banner

    题目传送门 /* 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 判断是否余下的是 "CODEFORCES" :) */ #include <cs ...

随机推荐

  1. 3896. 【NOIP2014模拟10.26】战争游戏

    鉴于如此一道恶心的题,作者还花了一个晚上草草学了tarjan. 于是乎,这道题就是道tarjan 具体怎么实现呢?正解上有个什么树形DP,看的我一脸懵逼. 这道题可以运用到tarjan一个高科技的算法 ...

  2. Mysql查看最大连接,修改

    1.查看最大连接量 show variables like '%max_connections%'; 2.修改最大连接量 //修改完记得重启 set GLOBAL max_connections = ...

  3. 关于java基础_方法的学习

    方法: 方法就是把一堆需要反复执行的代码封装起来,如果项目需要调用这段代码时,直接调用方法名即可 方法相当于榨汁机, 材料:水果 产出物:果汁 参数(材料):进入方法的数据 返回值(产出物):就是方法 ...

  4. k8s通过service访问pod(五)

    service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...

  5. chrome插件: yapi 接口TypeScript代码生成器

    前言 2020-09-12 天气晴,蓝天白云,微风,甚好. 前端Jser一枚,在公司的电脑前,浏览器打开着yapi的接口文档,那密密麻麻的接口数据,要一个一个的去敲打成为TypeScript的inte ...

  6. Nginx【常见知识点速查】

    文章更新时间:2020/04/10 一.简介 定义:Nginx是一个高性能的HTTP和反向代理web服务器 作用: 反向代理 正向代理 负载均衡 HTTP静态资源服务器(动静分离) 二.正向代理与反向 ...

  7. 转载:pycharm IDE 导入自定义模块

    http://www.mamicode.com/info-detail-2241193.html

  8. 小白也能看懂的Redis教学基础篇——redis神秘的数据结构

    各位看官大大们,周末好! 作为一个Java后端开发,要想获得比较可观的工资,Redis基本上是必会的(不要问我为什么知道,问就是被问过无数次).那么Redis是什么,它到底拥有什么神秘的力量,能获得众 ...

  9. 针对Linux上Java程式运行脚本的Log信息记录操作人员记录以及成功运行判断

    简介与优点 使用该教程,能直观地看到java启动脚本是否启动/关闭成功 能让自己的启动时间日期都记录在Log中 能记录有哪些人登陆了该服务器操作了启动关闭脚本(记录IP地址) 使用说明 在原有的启动和 ...

  10. Centos-shell-简介

    shell 壳 1. 用户在操作系统上完成的所有任务都是通过shell与linux内核的交互实现的, 是用户和操作系统内核之间的通信桥梁 用户操作任务 <__> shell <__& ...