扑克牌(cards)
2024-09-04 15:40:18
扑克牌
思路
这题也是二分!!
我们二分有几套牌,然后再去检验是否符合,至于怎么想到的,不要问我,我也不知道
那么我们主要解决的就是check函数
我们将二分的套数和每种牌的数量进行比较,如果该种牌的数量大于mid,我们就不用管,如果小于的话我们就要将差值相加(代表我们要使用多少张鬼牌)
统计完后我们就判断对吧,我们判断我们统计出来所需要的鬼牌数量是否满足于小于题目给的鬼牌数量的同时也要小于mid,如果满足就返回mid(其实我最开始不懂这里,后来才知道只有统计出来的数小于mid,才可能满足题目的要求,即每套牌只能出现一张鬼牌)
代码就特别简单啊
代码
#include<bits/stdc++.h>
#define ll long long
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
using namespace std;
int n,m;
int a[];
int scan()
{
int as=,f=;
char c=getchar();
while(c>''||c<''){if(c=='-') f=-;c=getchar();}
while(c>=''&&c<=''){as=(as<<)+(as<<)+c-'';c=getchar();}
return as*f;
}
bool chek(int mid)
{
ll tot=;
FOR(i,,n) if(a[i]<mid) tot+=mid-a[i];
if(tot<=min(m,mid)) return ;
return ;
}
int main()
{
n=scan();
m=scan();
int maxx=;
FOR(i,,n)
{
a[i]=scan();
maxx=max(a[i],maxx);
}
int l=,r=maxx+m+,ans=;
while(l<r)
{
int mid=(l+r)>>;
if(chek(mid))
{
ans=mid;
l=mid+;
}
else r=mid;
}
cout<<ans;
return ;
}
最新文章
- Linux学习日记(二)
- 使用 jQuery Ajax 在页面滚动时从服务器加载数据
- SPIRE.DOC - .NET开发者的福利
- ahjesus web动态icon
- PuTTY配置
- Unity3d Asset Server启动问题
- Laravel 5 数据库迁移文件示例
- js swipe 图片滑动控件实现 任意尺寸适用任意屏幕
- php页面显示空白
- Gradle[1]gradle distZip时,增加目录信息到zip中
- uptime
- Unity 绘图性能优化 - Draw Call Batching
- 51nod_1040:最大公约数之和(数论)
- linux 下安装php curl扩展
- MyEclipse10中配置WebLogic10
- WebGL之通过外部传入a_PontSize值改变点着色器vshader内置变量gl_PointSize的值
- webstorm配置eslint【标记错误,修复错误】
- pandas学习笔记(一)
- mysql----Nested SELECT Quiz
- DBCA静默方式建库