CF1788A One and Two 题解
题意简述
给定一只含有 $ 1 $ 和 $ 2 $ 的序列 $ A $,求最小的整数 $ k $ 使得 $ a_1 \cdot a_2 \cdot ... \cdot a_k = a_{k+1} \cdot a_{k+2} \cdot ... \cdot a_n $ 且 $ k \in [1,n-1] $
Sol
根据小学的记忆 若 $ a $ 为一实数,则有:
$$ a \times 1 = a $$
所以可以将 $ A $ 中的 $ 1 $ 忽略掉,原题意就转化为求最小的 $ k $ 使得 $ [1, k] $ 与 $ [k+1, n] $ 内 $ 2 $ 的数量相等.
容易发现当且仅当 $ k $ 为偶数是存在解. 若记 $ 2 $ 的总个数为 $ sum $,则此时最小的 $ k $ 为第 $ \frac{sum}{2} $ 个 $ 2 $ 所对应的编号.
统计下总个数暴力判断即可.
代码:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
ll n, a[1010];
int main(){
ll T;
cin >> T;
while(T--){
ll sum = 0;
cin >> n;
for(ll i = 1; i <= n; i++){
cin >> a[i];
if(a[i] == 2)sum++;
}
if(cnt & 1){
cout << -1 << '\n';
}else{
ll cnt = 0;
for(ll i = 1; i <= n; i++){
if(a[i] == 2)cnt++;
if(cnt == (sum >> 1)){
cout << i << '\n';
break;
}
}
}
}
return 0;
}

浙公网安备 33010602011771号