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

    题目链接:

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

    题意:

    给一个数组,每个数与他相邻的数相连,第一个与最后一个相连,每个数的数值可以左右移动,问最少的移动次数使所有的数都为零。

    题解:

    把数组分成若干个部分,每个部分和都为0,每部分最多移动len-1,这样分的越多,得到的结果就越优。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    using namespace std;
    
    const int maxn=101010;
    typedef __int64 LL;
    
    int n;
    LL sum[maxn];
    int arr[maxn];
    map<LL,int> mp;
    
    void init(){
        mp.clear();
    }
    
    int main(){
        while(scanf("%d",&n)==1&&n){
            init();
            for(int i=1;i<=n;i++){
                scanf("%d",arr+i);
            }
            sum[1]=arr[1];
            mp[sum[1]]++;
            int ma=1;
            for(int i=2;i<=n;i++){
                sum[i]=sum[i-1]+arr[i];
                mp[sum[i]]++;
                if(mp[sum[i]]>ma) ma=mp[sum[i]];
            }
            int ans=n-ma;
            printf("%d
    ",ans); 
        } 
        return 0;
    } 
  • 相关阅读:
    双击返回 退出程序
    读取InputStream 中的内容
    wsgi服务器
    python 中的GIL
    json
    __getattr__
    错误类型
    __slot__用法
    获取属性以及基本方法
    linux IO
  • 原文地址:https://www.cnblogs.com/fenice/p/5536060.html
Copyright © 2011-2022 走看看