题链:

http://uoj.ac/problem/21

题解:

。。。技巧题吧

先看看题目让求什么:

令$F(x)=\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor +a[i]$%$x)$

要求输出最小的F(x)。

首先不难看出,x的取值不会超过最大的a[i]+1,(因为之后的答案都和x==a[i]+1时的答案相同)

把式子化为如下形式:

$F(x)=\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor +(a[i]-\lfloor a[i]/x \rfloor x))$

$\quad\quad=\sum_{i=1}^{n}(a[i]-\lfloor a[i]/x \rfloor (1-x))$

$\quad\quad=sum-\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor (1-x))$

$\quad\quad=sum+\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor (x-1))$

现在即是要找出最大的$\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor (x-1))$

然后我们令$t=\lfloor a[i]/x \rfloor$

(把a从小到大排序后)对于每一个枚举的x,

不难发现,随着a[i]的增大,t也是在单增,而且t的取值还是一段一段的。

即对于$a[i]∈ [\lambda x,(\lambda+1)x-1]  $,t的取值都是$\lambda$

所以我们可以用后缀和或者前缀和的方法对于每一个枚举的x,快速求出$\sum_{i=1}^{n}(\lfloor a[i]/x \rfloor (x-1))=\sum_{i=1}^{n}t (x-1)$

使得总复杂度为 O(NlogN)

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 1000050
#define INF 0x3f3f3f3f3f3f3f3f
using namespace std;
int cnt[MAXN];
int main(){
int n,maxa=0; long long ans=0,tmp,sum=0;
scanf("%d",&n);
for(int i=1,x;i<=n;i++)
scanf("%d",&x),cnt[x]++,maxa=max(maxa,x),sum+=x;
for(int i=maxa-1;i;i--) cnt[i]+=cnt[i+1];
for(int x=1;tmp=0,x<=maxa;x++){
for(int r=1;r*x<=maxa;r++)
tmp+=cnt[r*x];
tmp*=(x-1);
if(tmp>ans) ans=tmp;
}
printf("%lld",sum-ans);
return 0;
}

  

●UOJ 21 缩进优化的更多相关文章

  1. uoj problem 21 缩进优化

    题目: 小O是一个热爱短代码的选手.在缩代码方面,他是一位身经百战的老手.世界各地的OJ上,很多题的最短解答排行榜都有他的身影.这令他感到十分愉悦. 最近,他突然发现,很多时候自己的程序明明看起来比别 ...

  2. UOJ_21_【UR #1】缩进优化_数学

    UOJ_21_[UR #1]缩进优化_数学 题面:http://uoj.ac/problem/21 最小化$\sum\limits{i=1}^{n}a[i]/x+a[i]\;mod\;x$ =$\su ...

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

    传送门 http://uoj.ac/problem/21 枚举 (调和级数?) $\sum_{i=1}^{n} (a_i / x + a_i \bmod x) =\sum a_i - (\sum_{i ...

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

    我好弱啊,什么题都做不出来QAQ 原题: 小O是一个热爱短代码的选手.在缩代码方面,他是一位身经百战的老手.世界各地的OJ上,很多题的最短解答排行榜都有他的身影.这令他感到十分愉悦. 最近,他突然发现 ...

  5. 【uoj#21】[UR #1]缩进优化 数学

    题目描述 给出 $n$ 个数 ,求 $\text{Min}_{x=1}^{\infty}\sum\limits_{i=1}^n(\lfloor\frac {a_i}x\rfloor+a_i\ \tex ...

  6. Web 性能优化:21 种优化 CSS 和加快网站速度的方法

    这是 Web 性能优化的第 4 篇,上一篇在下面看点击查看: Web 性能优化:使用 Webpack 分离数据的正确方法 Web 性能优化:图片优化让网站大小减少 62% Web 性能优化:缓存 Re ...

  7. uoj21 【UR #1】缩进优化

    题目 题意简介明了,需要找到一个\(T\),最小化 \[\sum_{i=1}^n\left \lfloor \frac{a_i}{T} \right \rfloor+\sum_{i=1}^na_i\% ...

  8. uoj21 缩进优化(整除分块,乱搞)

    题目大意: 给定一个长度为\(n\)的序列 让你找一个\(x\),使得\(ans\)尽可能小 其中$$ans=\sum_{i=1}^{n}\lfloor\frac{a_i}{x}\rfloor + \ ...

  9. UOJ 做题记录

    UOJ 做题记录 其实我这么弱> >根本不会做题呢> > #21. [UR #1]缩进优化 其实想想还是一道非常丝播的题目呢> > 直接对于每个缩进长度统计一遍就好 ...

随机推荐

  1. Week1绪论--抽象数据类型

    一.作业题目 1.构造有理数T,元素e1,e2分别被赋以分子.分母值 2.销毁有理数T 3.用e(引用类型参数)返回有理数T的分子或分母,当入参i为1时返回分子, i为2是返回分母. 4.将有理数T的 ...

  2. 201621123031 《Java程序设计》第13周学习总结

    作业13-网络 1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被 ...

  3. 201621123043 《Java程序设计》第2周学习总结

    1.本周学习总结 使用jdk文档查阅函数功能及代码 用switch语句是在每个case中可能在第一行是sc.nextLine;来给回车赋值: 在使用循环的时候要注意循环返回的条件,否则陷入死循环可能会 ...

  4. codevs 3981 动态最大子段和

    3981 动态最大子段和 http://codevs.cn/problem/3981/    题目等级 : 钻石 Diamond   题目描述 Description 题目还是简单一点好... 有n个 ...

  5. 【详细】Lucene使用案例

    Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引 ...

  6. angular4学习笔记整理(二)angular4的路由使用

    这章说一下angular的路由 先说angular路由怎么引入,一开始new出来的angular项目它路由帮你配好了,但看要看app.module.ts里面 1.首先最上面要引入路由模块 import ...

  7. Python内置函数(16)——ord

    英文文档: ord(c) Given a string representing one Unicode character, return an integer representing the U ...

  8. javascript学习(4)异常处理 try-catch 和 onerror

    一.try-catch 1.样例1 1.1.源代码 1.2.执行后 2.样例2 2.1.源代码 2.2.执行后 二.onerror 1.源代码 2.执行后

  9. OAuth2.0学习(3-1)发布 spring-oauth-client 和 spring-oauth-server

    1.发布spring-oauth-server应用 1.1.创建案例数据库oauth2,root/Abc1234% 1.2.执行脚本,创建数据结构和demo数据 init_db.sql (user_用 ...

  10. 日推20单词 Day02

    1.distinguish v. 区别,辨别 2.tension n. 紧张,不安 3.sympathy n. 同情,慰问 4.admiration n. 羡慕 5.jealousy n. 嫉妒 6. ...