题目链接

大意

有\(N\)种颜色的球,第\(i\)种球有\(Ai\)个,要求把球分成几个集合,使得:

  1. 一个集合里的球只能有一种颜色。
  2. 任意两个集合的球的数量相差不能超过1。

求这些球至少需要分几个集合。

思路

我们设这些集合的大小为\(Ans\)与\(Ans+1\),考虑如何判断一个\(Ans\)是否可行。

由于一个集合里只能有一种颜色,所以我们可以对于每一种颜色都单独考虑。

设当前颜色为\(i\),我们设 \(Ai=X\cdot Ans+ Y\),其中\(Ans,Y\)满足\(Ans>Y\)。

那么易发现,若\(Y>X\),则剩下的\(Y\)个数就算平均分到\(X\)个集合里,也会剩下\((Y-X)\)个数,那么我们的\(Ans\)就不符合条件了。

又由于在\(Ai=X\cdot Ans+ Y\)式子中的\(X=\left \lfloor Ai/Ans \right \rfloor,Y=Ai\%Ans\)

化简一下,一个\(Ans\)可行的条件为:对于任意\(i\),都满足\(\left \lfloor Ai/Ans \right \rfloor\ge Ai\%Ans\)


尽管已经知道了如何判断一个\(Ans\)是否可行,但如果我们暴力去枚举\(Ans\),复杂度也是\(O(N\times A)\),考虑优化。

首先有一个很明显的性质就是\(Ans\le Min(Ai)\),即\(Ans\)至多是\(A\)中的最小值。

对于\(Ans\)的判断式:\(\left \lfloor Ai/Ans \right \rfloor\ge Ai\%Ans\)。

发现在\(Ans\le\sqrt{Ai}\)时,肯定是恒满足的,因为

\(\left \lfloor Ai/Ans \right \rfloor\ge \sqrt{Ai}\ge Ans\ge Ai\%Ans\)

所以所有满足\(Ans\le\sqrt{Ai}\)的\(Ans\)肯定都是可行的\(Ans\)。

考虑\(Ans>\sqrt{Ai}\)的情况:

在这种情况下,我们的判断式就会满足\(\left \lfloor Ai/Ans \right \rfloor<\sqrt{Ai}<Ans\),

所以我们不妨枚举\(\left \lfloor Ai/Ans \right \rfloor\)即\(X\)的取值,这样的复杂度是\(O(N\cdot\sqrt{A})\),可以接受。

然后又由于要让\(Ans\)可行,所以我们要让\(\left \lfloor Ai/Ans \right \rfloor\ge Ai\%Ans\),即\(Ans>X\ge Y\).

考虑满足上述条件下的\(Ans\)的取值为多少:

  • 由于\(Ai=X\cdot Ans+ Y\),\(Ans=\left \lfloor \frac{Ai-Y}{X} \right\rfloor\),在这种情况下,我们只知道\(X\)和\(Ai\),所以考虑\(Y\)的取值情况。

    由于\(0\le Y\le X\),则有\(\frac{Ai-X}{X}\le \frac{Ai-Y}{X}\le \frac{Ai}{X}\),\(\left \lfloor \frac{Ai-X}{X}\right \rfloor\le \left \lfloor \frac{Ai-Y}{X}\right \rfloor\le \left \lfloor \frac{Ai}{X}\right \rfloor\),

    即\(\left \lfloor \frac{Ai}{X}-1\right \rfloor\le Ans\le \left \lfloor \frac{Ai}{X}\right\rfloor\),\(\left \lfloor \frac{Ai}{X}\right \rfloor-1\le Ans\le \left \lfloor \frac{Ai}{X}\right\rfloor\)

    故\(Ans=\left \lfloor \frac{Ai}{X}\right \rfloor-1\)或\(\left \lfloor \frac{Ai}{X}\right\rfloor\),
  • 另:当\(Ans=\left \lfloor \frac{Ai}{X}\right \rfloor-1\)时,\(Ai=X\cdot Ans+Y=X\cdot\left \lfloor \frac{Ai}{X}\right\rfloor+Y-X\),

    又由于\(Y-X\le 0,X\cdot\left \lfloor \frac{Ai}{X}\right\rfloor\le Ai\),所以\(Ans=\left \lfloor \frac{Ai}{X}\right \rfloor-1\)时,只在\(Ai\%X=0\)时成立。

    (注:也可以这样理解:\(Ai=X\cdot Ans=X\cdot(Ans-1)+X\))

综上,\(Ans=\left \lfloor \frac{Ai}{X} \right \rfloor\),特殊的,当\(Ai\%X=0\)时,\(Ans\)还有可能为\((\left \lfloor \frac{Ai}{X}\right\rfloor-1)\)。


在求出\(Ans\)(集合大小中较小值)后,统计答案时就优先放\(Ans+1\),再放\(Ans\)这样的考虑就行了。

代码

#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
const int MAXN=505;
int N,A[MAXN];
int St,Mi=1e9,Ans;
int Check(int ans){
for(int i=1;i<=N;i++)
if(A[i]/ans<A[i]%ans)
return 0;
return 1;
}
long long Get(){
long long ans=0;
for(int i=1;i<=N;i++){
int m=(Ans+1-A[i]%(Ans+1))%(Ans+1);//还剩m个空位需要Ans来补.
ans+=m+(A[i]-m*Ans)/(Ans+1);
}
return ans;
}
int main(){
scanf("%d",&N);
for(int i=1;i<=N;i++)
scanf("%d",&A[i]),Mi=min(Mi,A[i]);
St=sqrt(Mi)+1;Ans=St-1;
for(int i=1;i<=St;i++){
if(Check(Mi/i)){
Ans=max(Ans,Mi/i);
break;
}
if(Mi%i==0)
if(Check(Mi/i-1)){
Ans=max(Ans,Mi/i-1);
break;
}
}
printf("%lld\n",Get());
}
/*
A<=(A/K)*(K+1)
ceil(A/val)-1<=K
*/

【CF792E】Colored Balls(数论分块)的更多相关文章

  1. CF792E Colored Balls

    题目大意:将n个数分解成若干组,如4 = 2+2, 7 = 2+2+3,保证所有组中数字之差<=1. 首先我们能想到找一个最小值x,然后从x+1到1枚举并check,找到了就输出.这是40分做法 ...

  2. CF792E Colored Balls【思维】

    题目传送门 考试的时候又想到了小凯的疑惑,真是中毒不浅... 设每一个数都可以被分成若干个$k$和$k+1$的和.数$x$能够被分成若干个$k$和$k+1$的和的充要条件是:$x%k<=floo ...

  3. Codeforces554 C Kyoya and Colored Balls

    C. Kyoya and Colored Balls Time Limit: 2000ms Memory Limit: 262144KB 64-bit integer IO format: %I64d ...

  4. codeforces 553A . Kyoya and Colored Balls 组合数学

    Kyoya Ootori has a bag with n colored balls that are colored with k different colors. The colors are ...

  5. Codeforces Round #309 (Div. 2) C. Kyoya and Colored Balls 排列组合

    C. Kyoya and Colored Balls Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contes ...

  6. Kyoya and Colored Balls(组合数)

    Kyoya and Colored Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  7. C. Kyoya and Colored Balls(Codeforces Round #309 (Div. 2))

    C. Kyoya and Colored Balls Kyoya Ootori has a bag with n colored balls that are colored with k diffe ...

  8. 【BZOJ1257】余数之和(数论分块,暴力)

    [BZOJ1257]余数之和(数论分块,暴力) 题解 Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的 ...

  9. 51nod“省选”模测第二场 B 异或约数和(数论分块)

    题意 题目链接 Sol 这题是来搞笑的吧.. 考虑一个数的贡献是\(O(\frac{N}{i})\) 直接数论分块. #include<bits/stdc++.h> #define Pai ...

随机推荐

  1. Jenkins_忘记管理员密码的处理方法

    1.查看jenkins配置存放目录 2.修改config.xml的useSecurity的true为flase 3.重启jenkins服务 4.进入jenkins,不输入密码直接就进入了jenkins ...

  2. Linux中ssh登陆慢的两种原因

    useDNS配置导致登陆慢 如果ssh server的配置文件(通常是 /etc/ssh/sshd_config )中设置 useDNS yes ,可能会导致 ssh 登陆卡住几十秒.将该配置项设为 ...

  3. vue3 父菜单渲染出来了,但是子菜单渲染不出来的原因

    子菜单始终渲染不出来,控制台出现警告如下: 在查看框架源码时,发现在渲染时应用了递归.在这个博客找到答案,原因是升级的vue的版本没有升级@vue/compiler-sfc的版本,这两个版本应该保持一 ...

  4. 蓝桥杯ALGO-1003

    问题描述 JiaoShou在爱琳大陆的旅行完毕,即将回家,为了纪念这次旅行,他决定带回一些礼物给好朋友. 在走出了怪物森林以后,JiaoShou看到了排成一排的N个石子. 这些石子很漂亮,JiaoSh ...

  5. Cache一致性协议与伪共享问题

    Cache一致性协议 在说伪共享问题之前,有必要聊一聊什么是Cache一致性协议 局部性原理 时间局部性:如果一个信息项正在被访问,那么在近期它很可能还会被再次访问 比如循环.方法的反复调用等 空间局 ...

  6. Bootstrap实战 - 响应式布局

    一.介绍 响应式布局就是一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本.这个概念是为解决移动互联网浏览而诞生的. 导航栏与轮播在大部分网站的头部占很高的比重,特别是导航栏,扮演着网站地图的 ...

  7. 【记录一个问题】thanos receiver在tsdb切换期间,导致remote write接口失败增加

    如图:配置了thanos receiver落盘的时间周期为10分钟,结果导致在切换tsdb期间,remote write接口的失败率增高. 目前看来,解决办法就是上游增加重试.

  8. HBase结构

      Pig,可以使用Pig Latin流式编程语言来操作HBase中的数据 Hive,可以使用类似SQL语言来访问HBase,最终本质是编译成MapReduce Job来处理HBase表数据,适合做数 ...

  9. 关于3G移动通信网络中用户ip的配置过程的研究(中国电信cdma2000)

    在RP口对ppp过程进行研究 PPP协商过程,如下图所示: 在建立ppp过程中pdsn需要与FAAA.HAAA交互.同时在分组数据业务进行过程中这种交互更加频繁,介绍如下,分为两种情况,简单ip,移动 ...

  10. 查看Linux系统信息

    1.查看内核 [root@localhost etc]# uname -aLinux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue No ...