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题 解析的更多相关文章

  1. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  2. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  3. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  4. Codeforces Round #833 (Div. 2)补题

    Codeforces Round #833 (Div. 2) D. ConstructOR 知识点:高位和对低位无影响 一开始以为和广州的M一样,是数位dp,后来发现只要找到一个就行 果然无论什么时候 ...

  5. 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 ...

  6. 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 ...

  7. Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)

    题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...

  8. Codeforces Round #425 (Div. 2))——A题&&B题&&D题

    A. Sasha and Sticks 题目链接:http://codeforces.com/contest/832/problem/A 题目意思:n个棍,双方每次取k个,取得多次数的人获胜,Sash ...

  9. Codeforces Round #579 (Div. 3) 套题 题解

    A. Circle of Students      题目:https://codeforces.com/contest/1203/problem/A 题意:一堆人坐成一个环,问能否按逆时针或者顺时针 ...

  10. Codeforces Round #786 (Div. 3) 补题记录

    小结: A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了. CF1674A Number Transforma ...

随机推荐

  1. 旧笔记本安装Win8.1实录

    昨天发现一台尘封已久的Lenovo ideapad Y550,给它装上了Windows 10 然后第二天系统挂掉了 挂的原因是半夜万恶之源Windows更新开始造孽了 刚好没电 文件全坏了 真 解除封 ...

  2. 第1章-JSP 简介

    目录 什么是JSP 安装配置JSP运行环境 JSP页面 JSP页面简介 设置Web服务目录 JSP运行原理 JSP 与Java Servlet的关系 HTML与JavaScript 什么是JSP ★ ...

  3. 熔断、限流、降级 —— SpringCloud Hystrix

    概述 Hystrix 为 微服务架构提供了一整套服务隔离.服务熔断和服务降级的解决方案.它是熔断器的一种实现,主要用于解决微服务架构的高可用及服务雪崩等问题 Hystrix 的特性如下: 服务熔断:H ...

  4. 游戏AI行为决策——MLP(多层感知机/人工神经网络)

    游戏AI行为决策(特别篇)--MLP(附代码与项目) 你一定听说过神经网络的大名,你有想过将它用于游戏AI的行为决策上吗?其实在(2010年发布的)<最高指挥官2>中就有应用了,今天请允许 ...

  5. Redis 入门 - 收官

    <Redis 入门>系列文章总算完成了,希望这个系列文章可以想入门或刚入门的同学提供帮助,希望能让你形成学习Redis系统性概念. 当时为什么要写这个系列文章,是因为我自己就是迷迷糊糊一路 ...

  6. MySQL事务理论及实现

    理论大多引自<高性能MySQL>一书,不过在自测的过程中不知道是不是SQL版本的问题,还是操作有问题,在设置事务隔离级别的时候 按书上讲SET TRANSACTION ISOLATION ...

  7. 【赵渝强老师】使用Oracle的跟踪文件

    一.什么是跟踪文件? 跟踪文件中包含了大量而详细的诊断和调试信息.通过对跟踪文件的解读和分析,我们可以定位问题.分析问题和解决问题.从跟踪文件的产生的来源来看,跟踪文件又可以分为两类:一类是数据库的操 ...

  8. PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(四)

    无论100个表还是30个表,在使用PasteForm模式的时候,管理端的页面是一样的,大概4个页面, 利用不同操作模式下的不同dto数据模型,通过后端修改对应的dto可以做到控制前端的UI,在没有特别 ...

  9. DOM 操作的常用 API 有哪些 ?

    DOM 操作的常用 API 就是DOM 通过API (接口)获取页面(html)元素: 1. 节点查询 API 1.1 document.querySelector()  选择第一个匹配的元素 1.2 ...

  10. 02 Transformer 中 Add&Norm (残差和标准化)代码实现

    python/pytorch 基础 https://www.cnblogs.com/nickchen121 培训机构(Django 类似于 Transformers) 首先由一个 norm 函数 no ...