codeforces 675C Money Transfers(贪心)

来源:互联网 发布:想听歌下载什么软件 编辑:程序博客网 时间:2024/05/21 17:20

题目链接:http://codeforces.com/contest/675/problem/C

题意:有n个银行围成一圈,相邻的银行可以相互转账,问最少操作次数使得余额均为0。

思路:从1-n扫一遍,处理前缀和,如果有一段长为l的子序列和为0,则操作次数可以减少一次。结果即n-出现次数最多的前缀和的值。


#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 5;int a[N];map <ll ,int> q;int main(){    int n ,ans = 0;    ll sum = 0;    scanf("%d",&n);    for(int i = 1 ;i <= n ;i++)    {        scanf("%d",&a[i]);        sum += a[i];        q[sum]++;        ans = max(ans ,q[sum]);    }    printf("%d \n",n - ans);    return 0;}


0 0