【题解】扑克牌游戏

【题解】扑克牌游戏

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

显然可以拿\(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

  苦辣
 */

原文地址:https://www.cnblogs.com/winlere/p/10367981.html

时间: 2024-10-10 10:07:33

【题解】扑克牌游戏的相关文章

扑克牌游戏-华为OJ-C++实现

/*扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王): 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER. 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR. 基本

扑克牌游戏研究先告一段落

该扑克牌游戏是别人写的程序,它是基于局域网写的,我本来计划是将其改写为一个服务器版本,但是实在是没有精力去研究,就先告一段落. 该扑克牌实现的功能点: C#.网络编程,WinForm 1)单冲牌,3个玩家: 2)局域网内三个玩家玩: 3)界面也简单,但是扑克牌的基本功能都实现了:洗牌.发牌.牌组.得分等. 十分值得研究的一个棋牌程序,原作者:http://www.cnblogs.com/DreamCreator/tag/%E6%96%97%E5%9C%B0%E4%B8%BB/ 链接:http:/

测开之路四十九:用Django实现扑克牌游戏

用Django实现和之前flask一样的扑克牌游戏 项目结构 html <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>扎金花</title></head><body> {% for poker in player1 %} <img src="/static/poker

[题解]Mayan游戏

Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个7行5列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定的步数内消除所有的方块,消除方块的规则如下: 1.每步移动可以且仅可以沿横向(即向左或向右)拖动某一方块一格:当拖动这一方块时,如果拖动后到达的位置(以下称目标位置)也有方块,那么这两个方块将交换位置(参见图6到图7):如果目标位置上没有方块,那么被拖动的方块将从原来的竖列中抽出,并从目标位置上掉落(直到不悬空,参

扑克牌游戏

经过几周的不懈努力,扑克牌的显示,玩家与扑克牌的对应关系,发牌,出牌等各种问题终于得到解决,虽然结果出来了,但是还有其他很多东西都需要去完善,以前怎么也没有想到我能编出这么有这么多代码的程序,虽然基本都是跟着老师做好的,但是自己也有很多付出在里面,心里还是很有成就感的,现在回想起来,好像在很多地方都出了各种各样的问题,比如程序运行后窗口里没牌,添加按钮但是按钮看不到在哪里,还有重复的牌,然后选好牌出牌但是出不了等等,这些问题当时困扰了我很久,明明看看程序觉得根本没错了,但是结果就是和预期的不一样

[题解] [JSOI2013] 游戏中的学问

题面 题解 这个数据范围, 直接 DP 一下就完了 看是这个人新开一个圈还是加到别的圈里去 注意, 新开一个圈最少需要三个人 设 \(f[i][j]\) 为前 \(i\) 个人组成 \(j\) 个圈的方案数 \[ f[i][j] = \begin{cases} f[i - 1][j] * (i - 1)\f[i - 3][j - 1] * (i - 1) * (i - 2)\\end{cases} \] 没了 Code #include <algorithm> #include <ios

一个扑克牌游戏的模拟

每人8张牌,每次抽两张,三个玩家和庄家依次比较, 对子比非对子大,对王最大,依次KQJ 10 9 8```2 A 非对子时,求和,只考虑个位数 分步骤模拟容易不清楚,同时庞杂的变量再次证明可读性多么重要 #include<stdio.h> #include<stdlib.h> #include<time.h> #define JU 100000 #define QIAN 5000 int main() { int ju,win=0,sum=0,lose=0; srand

【题解】游戏

题目描述见Luogu P2462. 算法分析 其实这道题并不难,关键是如何转化.因为需要找到最长的单词接龙,就可以用图论来看.单词接龙不会出现环,所以,这就是个DAG上的拓扑排序.如果两个单词可以接在一起,就必须满足以下条件: 前一个单词的字母都必须在后一个单词中出现过 任意一个字母都不能少 后一个单词的长度比前一个单词多1,不能多也不能少 因为没有对顺序作要求,我们只需记录其出现次数即可,并存储它们的哈希值(hash/散列),枚举每个字符串的每个字母,增加其出现次数,并判断该字符串是否存在,如

C++小游戏:扑克牌21点

21点扑克牌游戏: 程序说明:该程序是模拟21点扑克牌游戏,玩家最多可以要5张牌,但是如果牌的点数之和超过21点,则自动出局,在不超过21点的情况下,玩家与庄家比牌的大小,大者为赢家 程序片段分析: [1]头文件处: #include<iostream> #include<cstdlib> #include<ctime> using namespace std; cstdlib这个头文件里面,等价与stdlib,因为要生成随机数,需要调用函数rand和srand,百科里