zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 21 D. Array Division 前缀和

    链接:

    http://codeforces.com/contest/808/problem/D

    题意:

    给你一个数组a,问能否移动一个数的位置使得可以分成两部分,这两个部分的和相等

    题解:

    要么把后面的数移到前面,要么把前面的数移到后面,分别算一下,先用map存一下,不过还要特判当有一个数为sum/2的时候

    代码:

    31 ll n;
    32 ll a[MAXN];
    33 map<ll, ll> mmp;
    34 
    35 int main() {
    36     ios::sync_with_stdio(false), cin.tie(0);
    37     cin >> n;
    38     ll sum = 0;
    39     ll Max = 0;
    40     rep(i, 1, n + 1) {
    41         cin >> a[i];
    42         Max = max(Max, a[i]);
    43         sum += a[i];
    44         mmp[a[i]]++;
    45     }
    46     if (sum & 1) return (cout << "NO" << endl), 0;
    47     sum /= 2;
    48     if (Max == sum) return (cout << "YES" << endl), 0;
    49     if (Max > sum)return (cout << "NO" << endl), 0;
    50     ll s = 0;
    51     rep(i, 1, n + 1) {
    52         s += a[i];
    53         mmp[a[i]]--;
    54         if (mmp[sum - s]) return (cout << "YES" << endl), 0;
    55     }
    56     mmp.clear();
    57     rep(i, 1, n + 1) mmp[a[i]]++;
    58     s = 0;
    59     per(i, 1, n + 1) {
    60         s += a[i];
    61         mmp[a[i]]--;
    62         if (mmp[sum - s]) return (cout << "YES" << endl), 0;
    63     }
    64     cout << "NO" << endl;
    65     return 0;
    66 }
  • 相关阅读:
    winform 计算器
    ajax无刷新上传图片
    Dapper的基本使用
    补充1
    Ajax2
    Ajax1
    jQuery2
    Select查询语句2
    jQuery1
    分页与组合查询
  • 原文地址:https://www.cnblogs.com/baocong/p/7372859.html
Copyright © 2011-2022 走看看