【题解】扑克牌游戏

【题解】扑克牌游戏

假如我们知道一个答案,那么我们剩下的问题就是去检查这个答案是否合法。

显然可以拿mm做文章,假设我们最终可以得到ansans组套牌,那么对于每张牌,如果它的数量比ansans小,我们就需要拿jokerjoker补。多的就没关系了。

很棒的思路,还有一个贪心做法,也很神仙。orz

#include<bits/stdc++.h>
#define R register int
#define gc getchar
using namespace std;
typedef long long ll;
#define RP(t,a,b) for(register ll t(a),edd(b);t<=edd;t++)
#define DRP(t,a,b) for(register ll t(a),edd(b);t>=edd;t--)
int qr(ll x){
	ll ans=0,flag=1;
	char ch=gc();
	while((ch>'9'||ch<'0')&&ch!='-')ch=gc();
	if(ch=='-')flag=-1,ch=gc();
	while(ch>='0'&&ch<='9')ans=ans*10ll+ch-48ll,ch=gc();
	return ans*flag;
}

int psj_ak_ioi=2020;
const int maxn=101;
ll data[maxn];
ll n,m;
inline bool chek(ll x){
    ll ret=0;
    RP(t,1,n) if(data[t]<x) ret+=x-data[t];
    return ret<=m&&ret<=x;
}

int main(){
    n=qr(1ll);m=qr(1ll);
    RP(t,1,n) data[t]=qr(1ll);
    int l=0,r=(ll)500000005+m;
    do{
        register ll mid=(l+r)>>1;
        if(chek(mid)) l=mid+1;
        else r=mid-1;
    }while(l+10ll<=r);
    DRP(t,r+5ll,max(l-5ll,0ll)) if(chek(t)) return cout<<t<<endl,0;
    return 0;
}

/*
  这道题可以套拟阵?
  交换性很显然,遗传性有吗?
  不管了就这样做 orz yyb

  二分贪心QAQ

  还有24min

  苦辣
 */

posted @   谁是鸽王  阅读(182)  评论(0编辑  收藏  举报
编辑推荐:
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
阅读排行:
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· 为什么AI教师难以实现
· 如何让低于1B参数的小型语言模型实现 100% 的准确率
· AI Agent爆火后,MCP协议为什么如此重要!




















































点击右上角即可分享
微信分享提示