CF1809D Binary String Sorting 题解
贪心。由于每次操作的代价都很大,所以需要优先减少操作次数,然后尽量多使用交换操作。
易得交换操作最多只会发生一次,因为每次交换操作只能消除一个逆序对,当存在两个或多个逆序对时,可以通过删除操作来减少更多的逆序对,减少操作次数。当只存在一个逆序对时,自然也只能交换一次。
然后,由于排序结束后 \(0\) 和 \(1\) 之间必然有一条分界线,左边是 \(0\),右边是 \(1\)。我们考虑枚举这条分界线,在分界线左边的 \(1\) 需要删除,在分界线右边的 \(0\) 需要删除。在分界线的同侧进行交换操作是无意义的,因为这并不会减少左边的 \(1\) 或右边的 \(0\)。
如果一次交换操作能恰好把左边的 \(1\) 换到右边,右边的 \(0\) 换到左边,那么可以优先执行这个交换操作,我们发现这种情况只会在分界线左右第一个元素发生,正好印证了上文交换操作最多只会发生一次。所以,当分界线左边第一个元素为 \(1\),右边第 \(1\) 个元素为 \(0\) 时,需要进行一次交换操作,从而减少两次修改操作。
如果分界线不满足左边第一个元素为 \(1\),右边第 \(1\) 个元素为 \(0\) 时,其实也不用处理分界线左右第一个元素。因为无论是 \(00\) 还是 \(11\) 还是 \(01\),其实都是符合条件的数对,并不会影响结果。
#include <bits/stdc++.h>
using namespace std;
long long t,n,sf=1e12,df=1e12+1;
char str[400000];
int main()
{
scanf("%lld",&t);
while(t--)
{
long long s0=0,s1=0,z=0,y=0,ans=1e18;
scanf("%s",str+1);
n=strlen(str+1);
for(int i=2;i<=n;i++)
if(str[i]=='0')y++;
for(int i=1;i<=n-1;i++)
{
if(str[i+1]=='0')y--;
if(str[i-1]=='1')z++;
if(str[i]=='1'&&str[i+1]=='0')ans=min(ans,(z+y)*df+sf);
else ans=min(ans,(z+y)*df);
}
if(ans==1e18)printf("0\n");
else printf("%lld\n",ans);
}
return 0;
}
CF1809D Binary String Sorting 题解的更多相关文章
- Binary String Matching(kmp+str)
Binary String Matching 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alp ...
- Codeforces 862D. Mahmoud and Ehab and the binary string (二分)
题目链接:Mahmoud and Ehab and the binary string 题意: 一道交互题,首先给出一个字符串的长度l.现在让你进行提问(最多15次),每次提问提出一个字符串,会返回这 ...
- Codeforces1107E Vasya and Binary String 记忆化dp
Codeforces1107E 记忆化dp E. Vasya and Binary String Description: Vasya has a string \(s\) of length \(n ...
- Codeforces Round #598 (Div. 3) D. Binary String Minimizing 贪心
D. Binary String Minimizing You are given a binary string of length n (i. e. a string consisting of ...
- Educational Codeforces Round 94 (Rated for Div. 2) String Similarity、RPG Protagonist、Binary String Reconstruction、Zigzags 思维
题目链接:String Similarity 题意: 首先题目定义了两个串的相似(串的构成是0.1),如果两个串存在对于一个下标k,它们的值一样,那么这两个串就相似 然后题目给你一个长度为2n-1的串 ...
- Binary String Matching
问题 B: Binary String Matching 时间限制: 3 Sec 内存限制: 128 MB提交: 4 解决: 2[提交][状态][讨论版] 题目描述 Given two strin ...
- NYOJ之Binary String Matching
Binary String Matching 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose a ...
- ACM Binary String Matching
Binary String Matching 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 Given two strings A and B, whose alp ...
- encode_json 会对给定的Perl的数据结构转换为一个UTF-8 encoded, binary string.
use JSON qw/encode_json decode_json/ ; use Encode; my $data = [ { 'name' => 'Ken' , 'age' => 1 ...
- perl encode_json 会产生 UTF-8 (binary) string decode_json 需要一个 UTF-8 (binary) string
encode_json $json_text = encode_json $perl_scalar Converts the given Perl data structure to a UTF-8 ...
随机推荐
- STLINK/JLINK USB识别不稳定问题的解决
第一阶段:自己基于STM32F103C8T6的STLINK,调试一直正常. 第二阶段:发现了硬汉的教程,基于JLINK的RTT viewer 代替串口打印调试信息,所以购买了JLINK,手里的STLI ...
- configparser.ConfigParser
这是fens.conf里的初始内容: 下面是python3中configparser的处理原码:import configparsercf = configparser.ConfigParser()c ...
- 解决 windows 10 WSL 安装Ubuntu后 屏幕亮度飙至最高 且屏幕亮度无法调节 外接显示器无法显示 的问题
转载请注明出处:博客园 博主Bubgit https://www.cnblogs.com/Bubgit/p/16367937.html 问题现象 自从windows 10推出了 wsl (Window ...
- asp.net里cookie、session进一步理解
参照: session+cookie简单讲解以及持久化登录实现_session实现用户登录_AkagiSenpai的博客-CSDN博客 sessionID和cookie - 哈哈呵h - 博客园 (c ...
- pandas 将excle两行或多行文本合并为一行
原有excle 目的: # j加载另一份数据源 import pandas as pd import xlrd import time from xlutils.copy import copy fr ...
- 36.3K star!开发者专属PPT神器,Markdown秒变炫酷幻灯片!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Slidev 是专为开发者打造的现代化幻灯片制作工具,基于 Markdown + Vue 技 ...
- Python基础 - 文件处理(上)
读写文件, 文件备份, 上传资料这些操作应该是大家日常工作中每天都要做的事情. 而文件呢, 又有不同的类型(后缀名), 比如 .txt, .xls, .xlsx, .csv, .json, .sql ...
- RPC实战与核心原理之安全体系
安全体系:如何建立可靠的安全体系? 回顾 异步化".调用方利用异步化机制实现并行调用多个服务,以缩短整个调用时间:而服务提供方则可以利用异步化把业务逻辑放到自定义线程池里面去执行,以提升单机 ...
- Scipy中的稀疏矩阵的编码方式
import numpy as np from scipy import sparse (1)COO( Coordinate) 最直观的就是COO格式.它用了1维的数组来表示2维的矩阵,每个数组的长度 ...
- codeup之沙漏图形
Description 问题:输入n,输出正倒n层星号三角形.首行顶格,星号间有一空格,效果见样例 输入样例: 3 输出样例: * * * * * * * * * * * 数据规模 1<= n ...