[UOJ #21]缩进优化

来源:互联网 发布:淘宝店铺买家监控软件 编辑:程序博客网 时间:2024/05/21 05:57

题目大意

找到合适的x来最小化
ni=1aix+ai%x

解法

把模给拆了
ni=1ai+ni=1aix(1x)
维护桶的前缀和,枚举x和aix
计算答案即可

#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const int maxn=1000000+10;int a[maxn],sum[maxn];int i,j,k,l,r,t,n,m;ll ans,now;int read(){    int x=0,f=1;    char ch=getchar();    while (ch<'0'||ch>'9'){        if (ch=='-') f=-1;        ch=getchar();    }    while (ch>='0'&&ch<='9'){        x=x*10+ch-'0';        ch=getchar();    }    return x*f;}int main(){    n=read();    fo(i,1,n){        t=read();        a[t]++;    }    fo(i,1,maxn-10) sum[i]=sum[i-1]+a[i];    ans=1000000000000000;    fo(i,1,maxn-10){        now=0;        fo(j,1,(maxn-10)/i){            l=i*j;r=min(i*(j+1)-1,maxn-10);            now+=(ll)j*(1-i)*(sum[r]-sum[l-1]);        }        ans=min(ans,now);    }    fo(i,1,maxn-10) ans+=(ll)a[i]*i;    printf("%lld\n",ans);}
0 0
原创粉丝点击