Codeforces Round 975 Div.2 C题 解析
C题
题目链接:Problem - C - Codeforces
题目描述

思路
- 对于这道题,首先我们能想到最小的组数肯定是数量最多的那个卡片的数量(mx),因为这个值的每一个卡片不能在同一个组里面。
- 我们首先需要考虑是否能够保住这个sum/mx这个答案,甚至可以用k来增加答案的值。
- 而要保住这个答案,要不就是刚好sum%mx==0,即刚好没加k前大小就是sum/mx,然后因为有mx组,所以卡组大小又多了k/mx,
- 另一种可能就是k和多出的牌数再凑一层(指的是让sum%mx==0,用k来增大sum)出来,判断需要补的牌数和k的大小差即可。
- 如果两者都不可以,那就需要减少卡组大小,看剩余的牌数可否成为新的组。
- 如果减少一次卡组大小也不可以,就需要把卡组大小再减小,减小了卡组大小,剩余的数量就多了mx,再判断是否可以成为新的组,一直循环直到可以即输出。
时间复杂度:O(n)
代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+10;
int n,k;
int a[N];
void solve()
{
cin>>n>>k;
int mx=0,sum=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
mx=max(mx,a[i]);
}
int mans=sum/mx;
//如果刚好就直接k来增添答案即可
if (sum % mx == 0) {
cout << min(mans + k / mx,n) << endl;
return;
}
//如果不够就看k能不能和多出来的再组一行
if (k >= (mx - sum % mx)) {
k -= (mx - sum % mx);
mans++;
cout << min(mans + k / mx,n) << endl;
return;
}
//此时k的作用不是继续增加mans,而是尽可能保住mans
//k补不上空缺,我们先尝试增加mx,再不行就减层
int res = sum % mx;//res标记的是指多出来的数
while (1) {
if (res % mans == 0) {//如果能够刚好保住
cout << mans << endl;
return;
}
if (k >= (mans - res % mans)) {//如果能用k来保住
cout << mans << endl;
return;
}
mans--;
res += mx;//少了一层多出来的就多mx
}
}
signed main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
return 0;
}
警示:
- 由于数据范围较大,所以我们需要用到long long,不然会爆数据
- 因为只有n个数,所以肯定答案肯定小于等于n,所以在第一种情况要和n取最小值。
Codeforces Round 975 Div.2 C题 解析的更多相关文章
- Codeforces Round #378 (Div. 2) D题(data structure)解题报告
题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Codeforces Round #713 (Div. 3)AB题
Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...
- Codeforces Round #833 (Div. 2)补题
Codeforces Round #833 (Div. 2) D. ConstructOR 知识点:高位和对低位无影响 一开始以为和广州的M一样,是数位dp,后来发现只要找到一个就行 果然无论什么时候 ...
- Codeforces Round #552 (Div. 3) A题
题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...
- Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring
D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- Codeforces Round #425 (Div. 2))——A题&&B题&&D题
A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...
- Codeforces Round #579 (Div. 3) 套题 题解
A. Circle of Students 题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...
- Codeforces Round #786 (Div. 3) 补题记录
小结: A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了. CF1674A Number Transforma ...
随机推荐
- ES6中对数组的数据进行排序
今天在工作中遇到了要对多选数据进行排序的一个功能,在此学习记录一下. 实现效果:点击左边的向下或者向上排序的按钮实现数据的排序. 选择第二个向下排序,结果如下: 具体方法如下: //找到原来需要排序的 ...
- 使用 setenv 配置文件管理 Tomcat 的自定义环境变量
1.背景描述 有时候,我们会在 catalina.bat 或 catalina.sh 文件中,自定义一些环境变量,例如额外指定 JDK 路径或设置 JVM 参数. 实际上,直接在 catalina.b ...
- 微信小程序之无需服务端支持实现内容安全检查
微信小程序之无需服务端支持实现内容安全检查 微信小程序审核未通过,原因如下: 为避免您的小程序被滥用,请你完善内容审核机制,如调用小程序内容安全API,或使用其他技术.人工审核手段,过滤色情.违法等有 ...
- Graph 学习
Graph basic terms 里面介绍了常见的一些基本概念,如 directed/undirected, weighted, cyclic/acyclic, Adjacency Matrix, ...
- 9.5内网横向&代理&隧道
Socks代理思路: 工具:nps.frp.ngrok.reGeorg.sockscap64.earthworm.proxifier.proxychains 知识点 1.内外网简单知识 2.内网1和内 ...
- error: rpmdb: BDB0113... rpm安装或尝查询时报错
等保要求安装杀毒软件,我跑脚本的时候发现异常退出了,一查芜湖,rpm管理包出问题了 root@VM_0_12_centos equal-protection]# rpm -g clamav error ...
- 【学习笔记】数位DP
数位DP 适用条件 此类题目一般要求在\([l,r]\)区间内满足条件的数的个数,答案一般与数的大小无关,而与数各位的组成有关.题目中给出的数的范围一般较大,往往在\(10^9\)以上因此无法暴力枚举 ...
- LoRaWAN网关价格干穿地板了
废话不多说,不要998,不要688,以太网版本只要398,4G版本只要498. 先上图片 1.1 产品特点 ◆ 高性能嵌入式硬件平台 ◆ 使用工业级 Cat.1 4G 模块 ◆ 宽压输入 DC 9-2 ...
- Java中使用BigDecimal进行double类型的计算(高精度,可保留几位小数)
Java中 小数直接进行乘除运算,会出现精度问题导致计算结果有误需要使用 BigDecimal 类型辅助运算,保证精度无误源码: import java.math.BigDecimal;import ...
- Task2 - IDA学习【进度 - 第二课】
学习目标: - 无名侠的课,看二进制培训(第二集和第三集)(https://space.bilibili.com/7761039/video) - 会反汇编 - 会字符串搜索(f12) - 会简单异或 ...