[COCI2012-2013#1] LJUBOMORA

1|0LJUBOMORA:这题本来用的数学方法把样例全给过了,没想到交了一下全WA了(呜呜

# [COCI2012-2013#1] LJUBOMORA

## 题目描述

一家弹珠厂向一所幼儿园捐赠了一些弹珠,弹珠一共有 M 种颜色,每颗弹珠都有一种颜色。老师需要把所有的弹珠分给 N 个孩子。每个孩子得到的所有弹珠都必须是**相同的颜色**,而且可以有一些孩子一颗弹珠也没得到。

我们把**嫉妒值**定义为分给一个孩子最多的弹珠数量。请你帮助老师分弹珠,使得嫉妒值**最小**。

例如,如果有 4个红色的弹珠(RRRR)和 7个蓝色的弹珠(BBBBBBB),要分给 5个孩子,那么我们可以这样划分:RR,RR,BB,BB,BBB。这样分的嫉妒值为 3,是最小的。

## 输入格式

输入共 M+1行。

第一行包含两个正整数 N,M,分别表示孩子数和弹珠的颜色总数。

接下来 M 行的第 i 行包含一个正整数 xx[1,109]),表示有 x 个颜色为 i 的弹珠。

## 输出格式

输出一行一个整数,表示最小的嫉妒值。

二分查找经典题,还是经典的最大值最小,建立check函数,然后查找到一个最小值

1 #include<bits/stdc++.h> 2 using namespace std; 3 long long a[100000010],n,m,res,r; 4 bool check(long long x) 5 { 6 long long num=0; 7 for(int i=0;i<m;i++) 8 { 9 num+=a[i]/x; 10 if(a[i]%x!=0) num++; 11 } 12 return num<=n; 13 } 14 int main() 15 { 16 cin>>n>>m; 17 for(int i=0;i<m;i++) cin>>a[i],r+=a[i]; 18 long long l=1; 19 while(l<=r) 20 { 21 long long mid=(l+r)>>1; 22 if(check(mid)) 23 { 24 r=mid-1; 25 res=mid; 26 } 27 else l=mid+1; 28 } 29 cout<<res; 30 return 0; 31 }

 


__EOF__

本文作者Sakurajimamai
本文链接https://www.cnblogs.com/o-Sakurajimamai-o/p/17431079.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   o-Sakurajimamai-o  阅读(84)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
-- --
点击右上角即可分享
微信分享提示