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;
}
posted @ 2023-02-10 23:06  象征阳光  阅读(7)  评论(0)    收藏  举报  来源