关闭

TJU-4113- Determine X(数学题)

标签: acm数学
175人阅读 评论(0) 收藏 举报
分类:

给出数列Ai~An,求

F(x)=i=1N(Aix+Aimodx)

的最小值。


教训:因为不需要使用long long的数组开成了long long,TLE了好多次。

做法:

预处理出f[n](小于等于n有多少个数)和s[n](小于等于n的数之和)。

暴力枚举x(从2到最大的一项),对于每个x,可以把这些数分成若干段,每段具有类似的性质。即Ai / x的值相同。

例如,数列为 2,4,5,6,8,9,13,14.........,当x=5,2,4可以分为1组,5,6可以分为一组,8,9为一组,13,14为一组

枚举Ai/x的值,就可以O(1)计算出这段中Ai/x+Ai%x的值。(tips:A%X=A-(A/X)×X)。设N=max(Ai),均摊的复杂度为O(NlogN)。

#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;


const int MAXM=1E6;
int a[MAXM+5],f[MAXM+5];
LL  s[MAXM+5];

void work()
{
    int i,j,k,t,m,n,maxa;
    LL ans,sum,x,temp,lim;
    maxa=0;

    scanf("%d",&n);
    for(i=0;i<n;i++) scanf("%d",&a[i]),maxa=max(maxa,a[i]);
    for(i=0;i<=maxa;i++) s[i]=f[i]=0;
    for(i=0;i<n;i++)
    {
        f[a[i]]++;
        s[a[i]]+=(LL)a[i];
    }

    for(i=1;i<=maxa;i++)
    {
        f[i]+=f[i-1];
        s[i]+=s[i-1];
    }
    ans=s[maxa];
    for(k=2;k<=maxa;k++)
    {
        sum=0;
        for(i=0;i*k<=maxa;i++)
        {
            int x=max(0,i*k-1);
            int y=min(maxa,(i+1)*k-1);
            sum+=(LL)i*(LL)(f[y]-f[x]);
            sum+=s[y]-s[x]-(LL)(f[y]-f[x])*(LL)i*(LL)k;
            if(sum>=ans) break;
        }
        ans=min(ans,sum);
    }
    printf("%lld\n",ans);
}

int main()
{
    int T;
    scanf("%d",&T);
    while(T--) work();
    return 0;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

spring 动态数据源配置以及相关问题

项目中要求读写分离,在spring中做到读写分离,很简单的想到在配置文件中设置两个数据源,一个datesource(只写),一个datesourceread(只读)。但是要根据上下文动态切换数据源,还...
  • chanya
  • chanya
  • 2015-05-14 16:01
  • 2736

斯坦福大学机器学习公开课 ---Octave Tutorial Transcript

斯坦福大学机器学习公开课 ---Octave Tutorial Transcript Prompt can be changed with the command PS1('>> '). Tran...
  • E_pen
  • E_pen
  • 2015-01-30 21:11
  • 1577

SpringBoot项目转传统SpringMVC war项目的部署问题

项目源码下载: SpringMVC4.0以后,Spring开始使用Spring Boot来支持自动化开发和部署,虽然方便了程序员和运维,但是也让老的架构开发人员感到困惑。 所以,作者做了一下...
  • rishengcsdn
  • rishengcsdn
  • 2016-12-21 17:41
  • 3725

【一道数学题】从(0,0)点经过(x,y)点到达(a,b)点的最短路径有多少条

如上图的题目,其中的A视为原点,X和B可以推广到任意坐标。计算代码如下: public static void main(String[] args) { deal(4, 4, ...
  • leeqihe
  • leeqihe
  • 2017-10-25 17:21
  • 88

非诚勿扰男嘉宾出的的数学题X2-3X-130=0如何解答?

 标准解法 您输入的方程为: 因此: 详细步骤如下:
  • u012935173
  • u012935173
  • 2013-11-23 22:55
  • 700

Axure夜话之程序员眼中的原型设计视频教程之数学题验证码.zip

  • 2014-12-03 18:01
  • 526KB
  • 下载

(HDUACM201403版_02)简单数学题

  • 2014-08-23 08:40
  • 360KB
  • 下载

百度知道上的数学题解析

  • 2009-06-11 12:06
  • 59KB
  • 下载

(lecture_02)简单数学题090223.ppt

  • 2009-07-19 09:50
  • 324KB
  • 下载

小学生自动出数学题软件

  • 2013-04-25 08:25
  • 654KB
  • 下载
    个人资料
    • 访问:28352次
    • 积分:1084
    • 等级:
    • 排名:千里之外
    • 原创:82篇
    • 转载:3篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论