题目描述:
输入描述:
输出描述:
样例及解释:
题意:可以选择l和k把l - l + k替换为l + k - l + 2k,求最小几次让数组全相同
思路: 从最后一位开始往前面找,是否相同,不相同就让后面的数乘二,看操作了几次
#include<bits/stdc++.h>
using namespace std;
int arr[200005];
int main(){
ios::sync_with_stdio(false);
int t;
int n;
cin >> t;
while(t--){
cin >> n;
for(int i = 0; i < n; i++){
cin >> arr[i];
}
int ans = 1;
int cnt = 0;
int sum = 0;
for(int i = n - 2; i >= 0; i--){
if(arr[i] == arr[n - 1]){
int a = ans;
if(cnt == 0){
ans++;
continue;
}
while(ans < a + cnt){
ans *= 2;
sum ++;
}
i = n - ans;
cnt = 0;
}else{
cnt++;
}
}
int a = ans;
while(ans < a + cnt){
ans *= 2;
sum++;
}
cout << sum << endl;
}
return 0;
}