codeforces Money Transfers

深感实现能力太差

开始想的是找最长的0连续长度,发现有问题,比如5 -5 5 -5 5 -5这个case

然后发现找可以构成0的段最多可以构成的段

不过发现我实现不了,不知道怎么找,2333

最后发现正解就是这样的,而且找的很简单

代码如下:

/*  ^^ ====== ^^ 
ID: meixiuxiu
PROG: test
LANG: C++11
*/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#include <cctype>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int ,int> pii;
#define MEM(a,b) memset(a,b,sizeof a)
#define CLR(a) memset(a,0,sizeof a);
#define pi acos(-1.0)
#define maxn 40000
#define maxv 100005
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
//#define LOCAL
map<ll,ll> mp;
int main()
{
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
//	freopen("out.txt","w",stdout);
#endif
    int n;cin >> n;
    ll sum = 0;
    ll cnt = 0;
    for(int i=1;i<=n;i++){
        int a;scanf("%d",&a);
        sum += a;
        mp[sum]++;
        cnt = max(cnt,mp[sum]);
    }
    cout << n-cnt << endl;
	return 0;
}


你可能感兴趣的:(ACM,贪心)