首页 > 其他分享 >CF1633B题解

CF1633B题解

时间:2024-01-17 21:45:18浏览次数:24  
标签:子串 CF1633B le 题解 个数 amount zero 字符串

Minority

题面翻译

  • 给定一个 \(01\) 字符串 \(s\),定义 \(c_k(l,r)\) 表示 \(s\) 的由下标为 \([l,r]\) 中的字母构成的连续子串中 \(k\) 的个数。
  • 定义 \(f(l,r)=\begin{cases}c_0(l,r)&c_0(l,r)<c_1(l,r)\\c_1(l,r)&c_0(l,r)>c_1(l,r)\\0&c_0(l,r)=c_1(l,r)\end{cases}\),求 \(\max\limits_{1\le l\le r\le n}f(l,r)\)。多组询问。
  • \(T\le10^4,\sum|s|\le2\times10^5\)

题目描述

You are given a string $ s $ , consisting only of characters '0' and '1'.

You have to choose a contiguous substring of $ s $ and remove all occurrences of the character, which is a strict minority in it, from the substring.

That is, if the amount of '0's in the substring is strictly smaller than the amount of '1's, remove all occurrences of '0' from the substring. If the amount of '1's is strictly smaller than the amount of '0's, remove all occurrences of '1'. If the amounts are the same, do nothing.

You have to apply the operation exactly once. What is the maximum amount of characters that can be removed?

输入格式

The first line contains a single integer $ t $ ( $ 1 \le t \le 10^4 $ ) — the number of testcases.

The only line of each testcase contains a non-empty string $ s $ , consisting only of characters '0' and '1'. The length of $ s $ doesn't exceed $ 2 \cdot 10^5 $ .

The total length of strings $ s $ over all testcases doesn't exceed $ 2 \cdot 10^5 $ .

输出格式

For each testcase, print a single integer — the maximum amount of characters that can be removed after applying the operation exactly once.

样例 #1

样例输入 #1

4
01
1010101010111
00110001000
1

样例输出 #1

0
5
3
0

大致题意

在字符串中选出一个子串删除其中少的那个\(1\)或\(0\),问能够删除的\(1\)或\(0\)个数最多是多少。

解题思路

这里题意说是让我们选出一个子串,其实不然,我们直接看整个字符串,整个字符串中\(1\)和\(0\)的个数应当有\(3\)种情况。

  1. \(1\)\(0\)的个数为零,其中之一为零那么删除的只能是为零的那个,结果也是零。
  2. \(1\)的个数大于\(0\),既然我们要求答案要删除最多的\(1\)或\(0\)的个数,那么我们直接选用整个字符串作为子串,删除其中的\(0\),而\(0\)的个数就是我们要找的答案。
  3. \(1\)的个数小于\(0\),思路和上面一样答案就是数量少的那一方。
  4. \(1\)的个数等于\(0\),这时候我们如果选择一整个字符串作为子串那么答案就是零,但是我们想想题目是让我们选一个子串,所以我们的思路不要局限在前面所说的将整个字符串作为子串,因为\(1\)和\(0\)个数相同那么我们只要将字符串最后那个\(1\)或\(0\)排除掉,选前面部分作为子串就构成了删除的条件。所以这种情况下答案就是\(1\)或\(0\)的个数减一。

AC代码

#include<iostream>
using namespace std;
const int N = 2e5 + 10;
char s[N];
int main()
{
	int t;
	scanf("%d", &t);
	while (t--) {
		scanf("%s", s);
		int one = 0, zero = 0;
		for (int i = 0; s[i] != '\0'; i++) {
			//记录0和1的个数
			switch (s[i]) {
			case '1': one++; break;
			case '0': zero++; break;
			}
		}
		//四种情况的判断,同时输出结果
		if (one == 0 || zero == 0)
			printf("0\n");
		else if (one < zero)
			printf("%d\n", one);
		else if (zero < one)
			printf("%d\n", zero);
		else if (one == zero)
			printf("%d\n", one - 1);
	}
	return 0;
}

标签:子串,CF1633B,le,题解,个数,amount,zero,字符串
From: https://www.cnblogs.com/XiaoWang-554/p/17971239

相关文章

  • P3391 文艺平衡树 题解
    QuestionP3391文艺平衡树写一种数据结构维护有序数列,需要完成以下操作:翻转一个区间,例如原有的序列是\(5,3,3,2,1\),翻转区间是\([2,4]\)的话,结果是\(5,2,3,4,1\)Solution这道题的表达是\(Splay\)但是\(Splay\)的代码实现比较困难,考虑使用FHQTreap。先思考如何将一......
  • CF1633A题解
    Div.7题面翻译给定\(t\)组数据。每组数据给定一个数\(n\)(\(10\len\le999\))。每次操作可以修改\(n\)任意一位上的数,将这一位上的数修改为\(0\sim9\)之间的任意数。要求使用最少的修改次数使这个数修改后是\(7\)的倍数,并且没有多余的前导\(0\)。输出修改后的数,如......
  • CF1637A题解
    SortingParts题面翻译给定一个长度为n的数组a。你可以执行恰好一次操作。每次操作选择一个在[1,n-1]内的整数len,然后将数组a中长度为len的前缀和长度为n-len的后缀分别排序。请判断是否能够通过操作,使得最终的数组a不满足\foralli\in[1,n),a_i<=a(i+1)。数据范......
  • [ARC169E] Avoid Boring Matches 题解
    题目链接首先考虑无解的情况,一个显然的观察是如果R的个数大于一半,那么无论如何都会出现两个R比赛的情况,小于一半时我们可以调整使得B全都在前面,显然有解。接下来问题变为找到最优可行解,但是状态的合法性不是显然的,我们先尝试判定这个问题。先考虑第一轮比赛,显然我们想让......
  • SP839Optimal Marks 题解
    part1:建图二进制异或,每一位互不干扰。所以对每一位分开来考虑。然后变成了一个经典的模型。当前每一个未确定点有两个选择:变成\(1\),变成\(0\);已经确定的点只能选它本身的值。于是构造思路非常套路了:构造虚点\(S\)、\(T\)。对于一个点\(u\),从\(S\)连向\(u\)一条边,值为......
  • ABC311_g One More Grid Task 题解
    题目链接:Atcoder或者洛谷对于解决二维区间内的最值类型问题,我们常常有一类特别好用的方法,就是悬线法,它可以看做是单调栈的子集,但更加好理解和书写。对于悬线法,我们有一个常见的模型,找出面积最大的符合题意的最大的矩形:例题P4147玉蟾宫。对于悬线法而言,我们需要理解什么是悬......
  • P2216 [HAOI2007] 理想的正方形 题解
    题目链接:理想的正方形比较明显的,我们可以用二维ST表解决,具体的二维ST表的实现,只需要知道一点:对于\(st[i][j][t]=max(i\simi+2^t,j\simj+2^t)\),表示的是如图所示的大正方形范围内的最值,它可以拆成从四个小正方形的左端点走\(2^{t-1}\)长的小正方形组成,预处理完直接查......
  • 【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)
    知识盲点概念介绍HashMap是基于Map接口构建的数据结构,它以键值对的形式存储元素,允许键和值都为null。由于键的唯一性,HashMap中只能有一个键为null。HashMap的特点是元素的无序性和不重复性。注意,HashMap并不是线程安全的。在多线程环境下,如果不进行适当的同步处理,可能会导致数据不......
  • P9018 [USACO23JAN] Moo Route G 题解
    首先有一些性质。因为保证有解,所以\(a_i\)一定都是\(2\)的倍数(必须一来一回)。并且总的步数应该为\(\suma_i\)。先考虑\(n\le2\)的情况,这时我们可以分情况讨论。因为每一条线段都会被来回走两次,所以我们可以先把每一个数都除以\(2\)。若\(a=b\),则最优情况一定是形......
  • P9017 [USACO23JAN] Lights Off G 题解
    一次操作相当于把\(a\)异或上\(b\),修改开关的一位相当于将这一位异或上\(1\)。会发现一个很神奇的性质:初始开关对灯的影响和改变开关状态对灯的影响是独立的。而前者的影响是固定的,所以我们可以只考虑改变开关状态对灯的影响。假设一共需要\(k\)次操作能使所有灯关闭,如果我......