You are given an array aa of nn integers. Initially there is only one copy of the given array.
You can do operations of two types:
You need to find the minimal number of operations needed to obtain a copy where all elements are equal.
Input
The input consists of multiple test cases. The first line contains a single integer tt (1≤t≤1041≤t≤104) — the number of test cases. Description of the test cases follows.
The first line of each test case contains a single integer nn (1≤n≤1051≤n≤105) — the length of the array aa.
The second line of each test case contains nn integers a1,a2,…,ana1,a2,…,an (−109≤ai≤109−109≤ai≤109) — the elements of the array aa.
It is guaranteed that the sum of nn over all test cases does not exceed 105105.
Output
For each test case output a single integer — the minimal number of operations needed to create at least one copy where all elements are equal.
Example
input
Copy
6 1 1789 6 0 1 3 3 7 0 2 -1000000000 1000000000 4 4 3 2 1 5 2 5 7 6 3 7 1 1 1 1 1 1 1
output
Copy
0 6 2 5 7 0
Note
In the first test case all elements in the array are already equal, that's why the answer is 00.
In the second test case it is possible to create a copy of the given array. After that there will be two identical arrays:
[ 0 1 3 3 7 0 ][ 0 1 3 3 7 0 ] and [ 0 1 3 3 7 0 ][ 0 1 3 3 7 0 ]
After that we can swap elements in a way so all zeroes are in one array:
[ 0 0– 0– 3 7 0 ][ 0 0_ 0_ 3 7 0 ] and [ 1– 1 3 3 7 3– ][ 1_ 1 3 3 7 3_ ]
Now let's create a copy of the first array:
[ 0 0 0 3 7 0 ][ 0 0 0 3 7 0 ], [ 0 0 0 3 7 0 ][ 0 0 0 3 7 0 ] and [ 1 1 3 3 7 3 ][ 1 1 3 3 7 3 ]
Let's swap elements in the first two copies:
[ 0 0 0 0– 0– 0 ][ 0 0 0 0_ 0_ 0 ], [ 3– 7– 0 3 7 0 ][ 3_ 7_ 0 3 7 0 ] and [ 1 1 3 3 7 3 ][ 1 1 3 3 7 3 ].
Finally, we made a copy where all elements are equal and made 66 operations.
It can be proven that no fewer operations are enough.
- #include
- #include
- #include
- using namespace std;
- const int N=2e5+10;
- typedef long long ll ;
- ll a[N];
- int t,n;
- map
int>mp; - int main()
- {
- cin>>t;
- while(t--)
- {
- cin>>n;
- int maxx=0;
- ll maxv=0;
- mp.clear();
- fill(a,a+n,0);//用memset会超时
- for(int i=0;i
- {
- cin>>a[i];
- mp[a[i]]++;
- if(mp[a[i]]>maxx)
- {
- maxx=mp[a[i]];
- maxv=a[i];
- }
- }
- if(mp[a[0]]==n)cout<<0<
- else
- {
- int count=0;
- while(mp[maxv]
- {
- count++;//扩展
- if(n-mp[maxv]>=mp[maxv])//供不应求
- {
- count+=mp[maxv];
- if(n-mp[maxv]==mp[maxv])break;
- }
- else//通货膨胀,只要少数几个
- {
- count+=(n-mp[maxv]);
- break;
- }
- mp[maxv]+=mp[maxv];//扩展之后的
- }
- cout<
- }
- }
- }
-
相关阅读:
深度学习笔记(2)——pytorch实现MNIST数据集分类(FNN、CNN、RNN、LSTM、GRU)
《白皮书》:人脸识别系统的组成及面临的安全风险
【广州华锐互动VRAR】VR元宇宙技术在气象卫星知识科普中的应用
基于FPGA的LCD1602驱动(含代码)
LeetCode刷题之HOT100之下一个排列
在Idea中使用Git后,类名各种颜色代表的含义
python公司员工考勤工资管理系统django662
2022牛客暑期多校训练营7(总结+补题)
如何在 Ubuntu 和其他 Linux 发行版中查看 MAC 地址
计算机毕业设计ssm+vue基本微信小程序的南通农商银行微银行系统
-
原文地址:https://blog.csdn.net/qq_62079079/article/details/126094726