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=1}^{n} a_i /x) * (x-1)$

看上去并没有一个很好的办法确定x的取值?

大概只能暴力枚举了。

枚举x的大小,如果用分块加速的方法统计解,复杂度是O(n)+O(n/2)+O(n/3)+O(n/4)+...

累积起来是O(nlogn)

嗯?好像是正解?

イミワカナイ

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #define LL long long
 7 using namespace std;
 8 const int mxn=1000010;
 9 int read(){
10     int x=0,f=1;char ch=getchar();
11     while(ch<‘0‘ || ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
12     while(ch>=‘0‘ && ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
13     return x*f;
14 }
15 int n,mx=0;
16 int a[mxn],smm[mxn];
17 LL sum=0;
18 LL calc(int lim){
19     LL res=0;
20     int i,cnt,last=0;
21     for(i=lim-1,cnt=0,last=0;i;last=i,i+=lim,cnt++){
22         i=min(i,mx);
23         res+=cnt*((LL)smm[i]-smm[last]);
24         if(i==mx)break;
25     }
26     return res*(lim-1);
27 }
28 int main(){
29     int i,j;
30     n=read();
31     for(i=1;i<=n;i++){
32         a[i]=read();sum+=a[i];
33         smm[a[i]]++;
34         mx=(mx>a[i])?mx:a[i];
35     }
36     for(i=1;i<=mx;i++){
37         smm[i]+=smm[i-1];
38     }
39     LL ans=0x3f3f3f3f3f3f3f;
40     for(i=1;i<=mx;i++)
41         ans=min(ans,sum-calc(i));
42     printf("%lld\n",ans);
43     return 0;
44 }
时间: 2024-08-07 00:17:44

UOJ#21【UR #1】缩进优化的相关文章

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

我好弱啊,什么题都做不出来QAQ 原题: 小O是一个热爱短代码的选手.在缩代码方面,他是一位身经百战的老手.世界各地的OJ上,很多题的最短解答排行榜都有他的身影.这令他感到十分愉悦. 最近,他突然发现,很多时候自己的程序明明看起来比别人的更短,实际代码量却更长.这令他感到很费解.经过一番研究,原来是因为他每一行的缩进都全是由空格组成的,大量的空格让代码量随之增大. 现在设小O有一份 n 行的代码,第 i 行有 ai 个空格作为缩进. 为解决这一问题,小O要给自己文本编辑器设定一个正整数的默认TA

●UOJ 21 缩进优化

题链: 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

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

题面:http://uoj.ac/problem/21 最小化$\sum\limits{i=1}^{n}a[i]/x+a[i]\;mod\;x$ =$\sum\limits{i=1}^{n}(1-x)*(a[i]/x)+a[i]$ =$\sum\limits{i=1}^{n}a[i]-\sum\limits{i=1}^{n}(x-1)*a[i]/x$ 直接枚举x,然后对于0~x-1这部分贡献是0,x~2x-1这部分贡献是1. 按x分块计算即可. 代码: #include <cstdio> #i

Linux Kernel 4.21已更新:优化AMD 7nm Zen2架构

导读 AMD 7nm Zen2处理器预计将于明年第一季推出,采用下一代7nm EPYC. Linux Kernel 4.21已经更新,以优化AMD 7nm EPYC Rome(罗马)处理器. AMD 7nm EPYC Rome(罗马)处理器在设计上做出了一些大胆的创新.例如,CPU内核和I/O芯片是分开的. "14nm I/O芯片是设计的关键.该核心芯片将8个7nm CPU小芯片连接在一起,创建了一个可大规模扩展的架构." 但是,在内核调整之后,会添加一个强制执行L3缓存限制,优先级和

面试被问MySQL总回答不好:总结100道MySQL面试题和21题MySQL性能优化

前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来 因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点 主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案 索引相关 什么是索引? 索引是个什么样的数据结构呢? Hash索引和B+树所有有什么区别或者说优劣呢? 上面

UOJ【UR #12】实验室外的攻防战

题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径与其他数字是否相交,相交就表示大小关系需要判断,(类似于二维偏序)用线段树维护区间最小值即可. 权值为1,2的线分别与权值为4的线相交,而且4在它们左边,所以需要判断它们的大小关系,发现${4>1}$,${4>2}$,所以满足条件. 1 #include<iostream> 2 #in

MySQL详解(21)------------缓存参数优化

数据库属于 IO 密集型的应用程序,其主要职责就是数据的管理及存储工作.而我们知道,从内存中读取一个数据库的时间是微秒级别,而从一块普通硬盘上读取一个IO是在毫秒级别,二者相差3个数量级.所以,要优化数据库,首先第一步需要优化的就是 IO,尽可能将磁盘IO转化为内存IO.本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化: query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL

[UOJ #180][UR #12]实验室外的攻防战(树状数组)

Description 时针指向午夜十二点,约定的日子——2月28日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 picks 博士所在的实验室. 当然,picks 博士不会坐以待毙,他早就率领着他的猴子们在实验室外修筑了许多的坚固防御工事. 经过跳蚤侦察兵的勘察,跳蚤国王发现 picks 博士的防御工事有着 n 处薄弱点,于是他把他的跳蚤大军分成了 n 支小队,并打算让它们分别进攻每一个薄弱点.但是因为战场混乱,这 n 支小队的位置被打乱了,重新整队之后,跳蚤国王发现第 i

【UOJ Round #1】

枚举/DP+排列组合 缩进优化 QAQ我当时一直在想:$min\{ \sum_{i=1}^n (\lfloor\frac{a[i]}{x}\rfloor + a[i] \ mod\ x) \}$ 然而并不会做啊……一点思路也没有……主要是后面那个取模非常难受…… 其实正解有点逆向思维的感觉:$ans=\sum_{i=1}^n a[i] - max\{ \sum_{i=1}^n \lfloor \frac{a[i]}{x}\rfloor *(x-1) \} $ 也就是先将a[i]全部加起来,然后再