zoukankan      html  css  js  c++  java
  • 【题解】扑克牌游戏

    【题解】扑克牌游戏

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

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

    很棒的思路,还有一个贪心做法,也很神仙。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
    
      苦辣
     */
    
    
  • 相关阅读:
    图形设计 X11
    软件安装 RPM SRPM YUM
    如何将excel表格中的纯数字删掉 空白行,然后删除
    考试机
    程序编译与运行
    基础设定与备份策略
    开机流程 模块管理 Loader
    让所有Excel数据格全部乘 某个数
    转:JDK1.8-Stream()使用详解
    转:IK分词原理
  • 原文地址:https://www.cnblogs.com/winlere/p/10367981.html
Copyright © 2011-2022 走看看