zoukankan      html  css  js  c++  java
  • Codeforces Round #353 (Div. 2) C. Money Transfers 数学

    C. Money Transfers

    链接:

    http://www.codeforces.com/contest/675/problem/C

    题意

    现在有n个银行,每个银行有a[i]元,可以像周围的银行转移钱

    你的目标是使得所有银行钱的个数都是0,问你最少操作多少次

    题解:

    原题,hdu 2590

    考虑一个连续的段,长度为l,如果该段的区间和为0的话,那么就操作l-1次就够了

    现在有n个数,你分成了k段,那么你就需要操作n-k次

    那么只要k最大就好了

    然后暴力枚举前缀和相等的,取最大就好了

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<map>
     4 using namespace std;
     5 typedef long long ll;
     6 const int maxn = 1e5 + 7;
     7 int a[maxn];
     8 map<ll, ll>cnt;
     9 int main()
    10 {
    11     int n;
    12     cin >> n;
    13     for (int i = 1; i <= n; i++) cin >> a[i];
    14     ll sum = 0, mx = 0;
    15     for (int i = 1; i <= n; i++)
    16     {
    17         sum += a[i];
    18         cnt[sum]++;
    19         mx = max(mx, cnt[sum]);
    20     }
    21     cout << n - mx << endl;
    22 }
  • 相关阅读:
    D
    A
    D
    G
    H
    E
    F
    B
    D
    oracle中新建用户和赋予权限
  • 原文地址:https://www.cnblogs.com/baocong/p/5980888.html
Copyright © 2011-2022 走看看