zoukankan      html  css  js  c++  java
  • Codeforces Round #601 (Div. 2) E2 Send Boxes to Alice (Hard Version)

    #include <iostream>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    const int maxn=1000010;
    int a[maxn];
    long long sum[maxn];
    int n;
    inline ll solve(long long k) {
        ll res=0;
        for(int i=1; i<=n; i++) {
            //对于当前值ai,要么就是ai%x放到后面,要么就是从后面拿x-ai%x,放到ai
            //当为sum[1],也就是只有a[1],相当于就把a[1]变成k的整数倍
            //当为sum[2],也就是a[1]+a[2],因为在前面已经把a[1]处理好,所以这里相当于只处理a[2]
            //一次类推
            ll x=sum[i]%k;
            res+=min(x,k-x);
        }
        return res;
    }
    int main() {
        scanf("%d",&n);
        for(int i=1; i<=n; i++) {
            scanf("%d",a+i);
            sum[i]=a[i]+sum[i-1];
        }
        long long tot=sum[n],ans=0x7f7f7f7f7f7f7f7f;
        for(ll i=2; i*i<=tot; i++) {
            if(tot%i) continue;//因子
            ans=min(ans,solve(i));
            while (tot%i==0) {//除去所有质因子
                tot/=i;
            }
        }
        if(tot!=1) ans=min(ans,solve(tot));//最后可能剩下一个因子,没有涉及到
        if(ans!=0x7f7f7f7f7f7f7f7f) cout<<ans<<endl;
        else cout<<-1<<endl;
        return 0;
    }
  • 相关阅读:
    ZOJ 3529
    将博客搬至CSDN
    BST 增删查操作 递归/非递归实现
    容器vector容量翻倍增长策略效率分析
    整数分解为若干项之和
    PAT-B-1080 MOOC期终成绩
    最大公约数 + 最小公倍数
    Fibonacci数
    排序
    PAT-B-1020
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11951228.html
Copyright © 2011-2022 走看看