UOJ#21. 【UR #1】缩进优化 数学

十分轻松的一道数学题.  

这个整除非常不好搞.  

但是呢,我们发现 $a[i]$ mod $x$ 可以等价于 $a[i]-\frac{a[i]}{x} \times x$,我们就构造出了公因式,然后推一推就没了.  

code: 

#include <bits/stdc++.h> 
#define ll long long 
#define N 1000008   
#define setIO(s) freopen(s".in","r",stdin) 
using namespace std;
int a[N<<1],sum[N<<1],cnt[N<<1],n,mx;        
int main() 
{
    // setIO("input");    
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]),++cnt[a[i]],sum[a[i]]++,mx=max(mx,a[i]);    
    for(int i=mx;i>=0;--i)  sum[i]+=sum[i+1];  
    ll sm=0,ans;  
    for(int i=1;i<=n;++i) sm+=(ll)a[i]; 
    ans=sm;  
    for(ll x=1;x<=mx;++x) 
    { 
        ll cur=sm,s2=0;       
        for(ll j=0;j<=mx;j+=x) 
        {
            s2+=(ll)j/x*(sum[(int)j]-sum[(int)j+x]);    
        }   
        cur-=s2*(x-1);     
        ans=min(ans,cur);    
    }
    printf("%lld\n",ans);   
    return 0; 
}

  

posted @ 2020-05-26 16:53  EM-LGH  阅读(146)  评论(0编辑  收藏  举报