【数学水题】【TOJ4113】【 Determine X】

原创 2015年07月09日 01:53:29

题目大意:

yuebai has a long sequence of integers A1,A2,,AN.
He also has such a function:

F(x)=i=1N(Aix+Aimodx)
x is a positive integer, which determined by yuebai.
Now he wants to know the minimum value of the function.

求一个x 使F[x]最大

解:

从1枚举到10^6

可知 当X超过10^6 方后 值就不变了

SB了


以为能快速求出的是sigma(Aimodx)。。。

发现 傻逼了 能快速求出的事 sigma(Aimodx)modx。。


预处理好a[i] 表示 A[i]中数值小于i的个数

以N/X的时间求出sigmafloor((Ai/x));


然后利用sigmafloor((Ai/x))+sigma(Aimodx)=sigma(Ai) 求出 sigma(Aimodx)


然后更新答案


代码如下:

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#define oo 0x13131313
using namespace std;
const int maxn=1000000+5;
int N;
int A[maxn],a[maxn];
int MAX;
long long sum=0;
void input()
{
    memset(A,0,sizeof(A));
    memset(a,0,sizeof(a));
    cin>>N;
    MAX=-1;
    sum=0;
    for(int i=1;i<=N;i++)
    {
        scanf("%d",&A[i]);
        a[A[i]]++;
        if(A[i]>MAX) MAX=A[i];
        sum+=A[i];
    }
    for(int i=1;i<=MAX;i++)
    {
        a[i]=a[i]+a[i-1];
    }
}
void solve()
{
    long long ans=1LL<<30;
    long long tt=0,g;
    for(int i=1;i<=MAX;i++)
    {
        int x=i;tt=0;
        for(int t=2*x;t-1<=MAX;t+=x)
        {
            int p=t-1;
            long long k=(long long)(a[p]-a[p-x])*(long long)(p/x);
            tt=tt+k;
            g=p;
        }
        tt=tt+(long long)(a[MAX]-a[g])*(long long)(MAX/x);
        tt=tt+sum-tt*(long long)x;
        if(tt<ans) ans=tt;
    }
    cout<<ans<<endl;
}
int main()
{
  //  freopen("a.in","r",stdin);
	int T;
	cin>>T;
	while(T--)
    {
        input();
        solve();
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LaTeX 使用经验之几个小问题

1. latex cannot determine size of graphic    这时候不能用ctrl+
  • u014330807
  • u014330807
  • 2014年10月04日 20:13
  • 1599

Hadoop集群安装遇到的问题

首先会因为以下几种情况才会出现启动不了datanode。 1.首先修改过master那台的配置文件, 2.多次hadoop namenode -format这种不好的习惯。 一般会出现一下报错:...
  • zhihaoma
  • zhihaoma
  • 2015年04月11日 10:46
  • 1372

C++ 内存相关

常见的内存错误及其对策 发生内存错误是件非常麻烦的事情。编译器不能自动发现这些错误,通常是在程序运行时才能捕捉到。而这些错误大多没有明显的症状,时隐时现,增加了改错的难度。有时用户怒气冲冲地把你找来...
  • leexurui
  • leexurui
  • 2015年10月05日 22:31
  • 616

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

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

Redis Sentinel高可用集群Java客户端

java客户端Jedis在2.2.2及以上版本实现了对Sentinel的支持,介绍开源项目sharded-jedis-sentinel-pool,能及时感知所有分片主从切换行为,进行连接池重建。...
  • tianwei7518
  • tianwei7518
  • 2015年04月10日 16:57
  • 12781

Docker测试环境笔记

构建Sinatra应用程序 [root@dockerWEBrickDocker]# vim Dockerfile   FROM ubuntu MAINTAINER wyfTurnbull h...
  • HuiseBug
  • HuiseBug
  • 2017年07月06日 11:14
  • 586

Windows 7-64位上编译webkit源码纪实

一、编译环境搭建 因为运行cygwin-downloader下载webkit编译必要的cygwin安装包太慢,经常到一半程序就退出,然后又要重新下载,所以只好自己先装一个cygwin。 二、源码下载 ...
  • dreamkid
  • dreamkid
  • 2013年09月28日 22:06
  • 2379

【动态规划】POJ - 2192 Zipper

【动态规划】POJ - 2192 Zipper DescriptionGiven three strings, you are to determine whether the third strin...
  • xuziling_
  • xuziling_
  • 2017年12月27日 16:45
  • 27

ASM AMDU工具的使用

AMDU是ORACLE针对ASM开发的源数据转储工具,其全称为ASM Metadata Dump Utility(AMDU) ASM作为近几年最流行的存储解决方案,大家对他的优缺点都有所了解,其中的问...
  • zhengwei125
  • zhengwei125
  • 2016年03月15日 18:07
  • 563

编程之美----数组的最长递增子序列

DESCRIPTION: 数组的最长递增子序列(LIS) Given a sequence of n real numbers a1, ..., an, determinea subsequence ...
  • u012653791
  • u012653791
  • 2013年10月31日 17:07
  • 4502
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【数学水题】【TOJ4113】【 Determine X】
举报原因:
原因补充:

(最多只允许输入30个字)