zoukankan      html  css  js  c++  java
  • [CF808D] Array Division

    [CF808D] Array Division

    Description

    给你一组数,问是否可以最多移动一个数,使得这一串数可以分成两个部分,每一部分所有数的和相等。

    Solution

    要么是一个前缀里抽调一个数,要么是一个前缀再加上剩下部分的一个数

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int n;
        cin >> n;
    
        vector<int> a(n + 2);
        for (int i = 1; i <= n; i++)
            cin >> a[i];
    
        multiset<int> s_left, s_right;
        for (int i = 1; i <= n; i++)
            s_right.insert(a[i]);
    
        int sum = 0;
        for (int i = 1; i <= n; i++)
            sum += a[i];
    
        if (sum & 1)
        {
            cout << "NO" << endl;
            return 0;
        }
    
        int presum = 0;
    
        for (int i = 1; i <= n; i++)
        {
            s_left.insert(a[i]);
            s_right.erase(s_right.find(a[i]));
            presum += a[i];
            if (presum * 2 == sum)
            {
                cout << "YES" << endl;
                return 0;
            }
            else if (presum * 2 < sum)
            {
                if (s_right.find(sum / 2 - presum) != s_right.end())
                {
                    cout << "YES" << endl;
                    return 0;
                }
            }
            else
            {
                if (s_left.find(-sum / 2 + presum) != s_left.end())
                {
                    cout << "YES" << endl;
                    return 0;
                }
            }
        }
        cout << "NO" << endl;
    }
    
  • 相关阅读:
    android 模拟点击事件
    IGZO显示屏
    java 代码混淆
    android 模拟点击3
    android 文件读写
    android 抓包 tcpdump
    pathon 2
    conversion to dalvik format failed with error 1
    zipalign
    android 来电状态
  • 原文地址:https://www.cnblogs.com/mollnn/p/14467149.html
Copyright © 2011-2022 走看看