首页 > 其他分享 >题解:Codeforces Round 967 (Div. 2) [暴力/贪心]

题解:Codeforces Round 967 (Div. 2) [暴力/贪心]

时间:2024-08-21 15:04:18浏览次数:9  
标签:967 leq int 题解 元素 Codeforces le 测试用例 test

A. Make All Equal

time limit per test: 1 second

memory limit per test: 256 megabytes

input: standard input

output: standard output

You are given a cyclic array \(a_1, a_2, \ldots, a_n\).

You can perform the following operation on \(a\) at most \(n - 1\) times:

  • Let \(m\) be the current size of \(a\), you can choose any two adjacent elements where the previous one is no greater than the latter one (In particular, \(a_m\) and \(a_1\) are adjacent and \(a_m\) is the previous one), and delete exactly one of them. In other words, choose an integer \(i\) (\(1 \leq i \leq m\)) where \(a_i \leq a_{(i \bmod m) + 1}\) holds, and delete exactly one of \(a_i\) or \(a_{(i \bmod m) + 1}\) from \(a\).

Your goal is to find the minimum number of operations needed to make all elements in \(a\) equal.

给你一个循环数组 \(a_1, a_2, \ldots, a_n\) 。

你最多可以对 \(a\) 执行 \(n - 1\) 次以下操作:

  • 假设 \(m\) 是 \(a\) 的当前大小,你可以选择任意两个相邻的元素,其中前一个元素不大于后一个元素(特别是 \(a_m\) 和 \(a_1\) 是相邻的,而 \(a_m\) 是前一个元素),并恰好删除其中一个元素。换句话说,选择一个 \(a_i \leq a_{(i \bmod m) + 1}\) 成立的整数 \(i\) ( \(1 \leq i \leq m\) ),并从 \(a\) 中恰好删除 \(a_i\) 或 \(a_{(i \bmod m) + 1}\) 中的一个。

你的目标是找出使 \(a\) 中所有元素相等所需的最少运算次数。

Input

Each test contains multiple test cases. The first line contains the number of test cases \(t\) (\(1 \le t \le 500\)). The description of the test cases follows.

The first line of each test case contains a single integer \(n\) (\(1 \le n \le 100\)) — the length of the array \(a\).

The second line of each test case contains \(n\) integers \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — the elements of array \(a\).

输入

每个测试包含多个测试用例。第一行包含测试用例的数量 \(t\) ( \(1 \le t \le 500\) )。测试用例说明如下。

每个测试用例的第一行包含一个整数 \(n\) ( \(1 \le n \le 100\) ) - 数组的长度 \(a\) 。

每个测试用例的第二行包含 \(n\) 个整数 \(a_1, a_2, \ldots, a_n\) ( \(1 \le a_i \le n\) ) - 数组 \(a\) 的元素。

Output

For each test case, output a single line containing an integer: the minimum number of operations needed to make all elements in \(a\) equal.

输出

对于每个测试用例,输出一行包含一个整数:使 \(a\) 中所有元素相等所需的最少操作数。

Example

Input

7
1
1
3
1 2 3
3
1 2 2
5
5 4 3 2 1
6
1 1 2 2 3 3
8
8 7 6 3 8 7 6 3
6
1 1 4 5 1 4

Output

0
2
1
4
4
6
3

Note

In the first test case, there is only one element in \(a\), so we can't do any operation.

In the second test case, we can perform the following operations to make all elements in \(a\) equal:

  • choose \(i = 2\), delete \(a_3\), then \(a\) would become \([1, 2]\).
  • choose \(i = 1\), delete \(a_1\), then \(a\) would become \([2]\).

It can be proven that we can't make all elements in \(a\) equal using fewer than \(2\) operations, so the answer is \(2\).

在第一个测试用例中, \(a\) 中只有一个元素,因此我们无法进行任何操作。

在第二个测试用例中,我们可以执行以下操作,使 \(a\) 中的所有元素相等:

  • 选择 \(i = 2\) ,删除 \(a_3\) ,那么 \(a\) 将变为 \([1, 2]\) 。
  • 选择 \(i = 1\) ,删除 \(a_1\) ,则 \(a\) 将变为 \([2]\) 。

可以证明,使用少于 \(2\) 的运算无法使 \(a\) 中的所有元素相等,因此答案是 \(2\) 。

题意

有一个循环数组 \(a\)
你每次可以操作:

对数组中相邻两个不同的数字删去任意一个(首尾两个也算相邻)
你需要不断操作,直到数组中只有一种元素时停止
问:你至少需要操作多少次

题解

只需要用一个map存储某种数字出现的个数
然后最后的数组就是全部那种数字了
所以只需要输出

\[数组总数 - 出现最多数字的个数 \]

即可

代码

#include <bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f
#define all(x) x.begin(),x.end()

using i64 = long long;
const int N = 2e5 + 10;
int t = 1;
int a[N];

void solve() {
	std::map<int,int> mp;
	int n;
	std::cin >> n;
	int max = 0;
	for(int i = 0 ; i < n ; i ++) {
		int num;
		std::cin >> num;
		mp[num]++;
		max = std::max(max,mp[num]);
	}
	std::cout << n - max << "\n";
}

signed main(){
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	std::cin >> t;
	while(t--){
		solve();
	}
	return 0;
}

有什么建议或者意见的欢迎在评论区留言!

标签:967,leq,int,题解,元素,Codeforces,le,测试用例,test
From: https://www.cnblogs.com/jiejiejiang2004/p/18371667

相关文章

  • 题解 |栈| #中缀表达式求值!!!!#
    描述请写一个整数计算器,支持加减乘三种运算和括号。数据范围:0≤∣s∣≤1000≤∣s∣≤100,保证计算结果始终在整型范围内要求:空间复杂度: O(n)O(n),时间复杂度 O(n)O(n)示例1输入:"1+2"返回值:3示例2输入:"(2*(3-4))*5"返回值:-10示例3输入:"3+2*3*4-1"返回值:26一、使......
  • Codeforces Round 967 (Div. 2) C题 类分治解法
    废话不多说,先上代码t=int(input())whilet>0:n=int(input())pre_d={1:[iforiinrange(2,n+1)]}pair_l=[]whilelen(pre_d)!=0:item=pre_d.items()now_d={}fork,vinitem:forii......
  • [ABC132F] Small Products 题解
    题意一句话题意不用再翻译了吧。思路先考虑朴素的dp,设\(dp_{i,j}\)表示长度为\(i\)结尾数字为\(j\)的序列的方案数,状态很好转移:\[dp_{i,j}=\sum_{a=1}^{\lfloor\frac{N}{j}\rfloor}dp_{i-1,a}\]这样时间复杂度是\(\Theta(nk)\)的,显然过不了。考虑优化这个dp。......
  • Codeforces Round 967 (Div. 2)
    A.MakeAllEqual题意:给定n个数每次可以选2个相邻的数,并且前面的数不能比后面的数大,并且删除其中的一个。这个数组是循环数组,最后一个数是第一个数的前一个数。问最少操作多少次,可以让剩下的数全都相等。思路:红黑树+一次遍历,记录出现次数最多的数,剩下的数全部删掉即可。总结:看......
  • [ABC156E] Roaming 题解
    前言这哪有蓝,评分似乎有点过了。思路既然是要统计每个房间人数的排列,那我们就枚举把所有人都放到\(i\)个房间里的方案数,这个用插板法解决,把所有人都放到\(i\)个房间里也就是把他们分成\(i\)份,这一部分的答案就是在\(n\)个人的\(n-1\)个空中插入\(i-1\)块隔板的方案......
  • 题解:P10724 [GESP202406 七级] 区间乘积
    思路当一个数是完全平方数的时候,它的所有质因子的次数都是偶数。记\(x\)的质因子为\(p_1^{q1}\timesp_2^{q2}\timesp_3^{q3}...\timesp_v^{qv}\)。这些数可以通过次数的奇偶性用一个\(v\)位的二进制串\(B\)表示,\(B_i\)为\(0\)说明\(q_i\)为偶数,\(B_i\)为\(......
  • [题解]P3311 [SDOI2014] 数数
    P3311[SDOI2014]数数看到多模式匹配,我们考虑先对所有模式串建立AC自动机。然后发现这道题和P4052文本生成器(题解)挺像的,后者让求包含至少一个模式串的个数,这道题让求一个也不包含的个数,这个就是一个用不用\(26^m\)去减的问题,很好处理。但这道题还多了一个条件,“幸运数”必须\(......
  • CodeForces 360D Levko and Sets
    洛谷传送门CF传送门求出\(p\)的原根\(g\),对每个\(a_i\)求出一个\(x_i\)表示\(g^{x_i}\equiva_i\pmod{p}\)(这部分可以BSGS)。之后的表述中\(a_i\)指\(x_i\)。那么集合生成方式相当于初始\(c=0\),每次让\(c\gets(c+a_ib_j)\bmod(p-1)\)。根据裴蜀定......
  • Prometheus部署以及问题解决
    Prometheus作用:Prometheus监控(PrometheusMonitoring)是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布,并在2016年加入了云原生计算基金会(CNCF)。Prometheus监控旨在收集、存储和查询各种指标数据,以帮助用户监视其应用程序和系统的性能和运行状态。部署流......
  • 题解:CF454B Little Pony and Sort by Shift
    题目描述题目传送门给定一个长度为$n$的数组$a$,每次可以将最后一个元素移动到第一个,问:至少需要几次操作,让序列从小到大排好序,若无解输出$-1$。算法1(暴力枚举)不难想到,将最后一个元素拼接在第一个元素之前,就可以实现将链转换成环,再依次遍历在数组$a_i$中长度为$n$的......