3.23题解
作者:互联网
小明爱玩牌
题目链接:
涉及知识点:
- 思维/二分
solution:
-
假设x就是我们要求的答案,我们知道我们一定可以组合出x - 1套牌,那么x + 1 套牌我们是组合不出来的
-
假如 我们组合出 x 套牌,那么如果 x > m 的话,那么我们就首先把 m 个万能牌用到,如果x < m 的话,我们最多需要用到x张万能牌,所以ans = min(x,m)
-
所以,假如我们能组合出x套牌,那么if(a[i] > x),我们就不需要把万能牌用到a[i] > x上,if(a[i] < x),那么我们就需要用到x - a[i]张万能牌,当然我们的ans -= x - a[i]
-
显然,如果到最后我们的ans大于0,则表示我们的万能牌还有剩余,或者是万能牌的个数恰好为0,则我们可以组成x套牌
-
由于本题没有题目链接,大家可以找雒东月要数据,数据的截止日期4月1日
std:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,m;
int a[N];
int l = 0;
int r = 1e10;
bool check(int x)
{
int ans = min(m,x);
for (int i = 1; i <= n; i ++ )
{
if(a[i] < x)
{
ans -= x - a[i];
}
if(ans < 0)
{
return false;
}
}
return true;
}
int main()
{
int res = 0;
// freopen("in.txt", "r", stdin);
scanf("%d%d",&n,&m);
for (int i = 1 ; i <= n ; i ++ ) scanf("%d",&a[i]);
while(l <= r)
{
int mid = (l+r)/2;
if(check(mid))
{
res = mid;
l = mid+1;
}
else r = mid-1;
}
cout << res << endl;
return 0;
}
标签:int,题解,万能,套牌,用到,3.23,ans,我们 来源: https://www.cnblogs.com/QFNU-ACM/p/12552211.html