首页 > 其他分享 >验题——8008: 纸牌游戏( "Accordian" Patience)

验题——8008: 纸牌游戏( "Accordian" Patience)

时间:2025-01-18 23:10:02浏览次数:1  
标签:const int pos Accordian Patience 8008 define

8008: 纸牌游戏( "Accordian" Patience)

题面

思路

用栈数组模拟,注意寻找pos的左边第一个和左边第三个下标的写法。

示例代码


using namespace std;

#define ll long long
//#define int ll
#define pii pair<int, int>
#define all(x) x.begin(),x.end()
#define fer(i, m, n) for(int i = m; i < n; ++i)
#define ferd(i, m, n) for(int i = m; i >= n; --i)

const int MOD = 1e9 + 7;
const int N = 55;
const int inf = 1e9;

stack<string> stk[N];

bool InRange(int x){
    return x >= 1 && x <= 52;
}

int GetLeftPos1(int x){
    if(InRange(x - 1) && !stk[x - 1].empty()) return x - 1;
    if(InRange(x - 1)) return GetLeftPos1(x - 1);
    return -1;
}

int GetLeftPos3(int x){
    return GetLeftPos1(GetLeftPos1(GetLeftPos1(x)));
}

void Init(){
    fer(i, 1, 53){
        while(!stk[i].empty()) stk[i].pop();
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s;
    int pos = 1;

    while(cin >> s, s!= "#"){
        Init();
        pos = 1;
        stk[1].push(s);
        fer(i, 2, 53){
            cin >> s;
            stk[i].push(s);
        }
        while(pos <= 52){
            if(stk[pos].empty()){
                pos++;
                continue;
            }
            string top = stk[pos].top();
            if(GetLeftPos3(pos) != -1){
                string top1 = stk[GetLeftPos3(pos)].top();
                if(top1[0] == top[0] || top1[1] == top[1]){
                    stk[GetLeftPos3(pos)].push(top);
                    int ind = GetLeftPos3(pos);
                    stk[pos].pop();
                    pos = ind;
                    continue;
                }
            }
            if(GetLeftPos1(pos) != -1){
                string top1 = stk[GetLeftPos1(pos)].top();
                if(top1[0] == top[0] || top1[1] == top[1]){
                    stk[GetLeftPos1(pos)].push(top);
                    int ind = GetLeftPos1(pos);
                    stk[pos].pop();
                    pos = ind;
                    continue;
                }
            }
            pos++;
        }
        int cnt = 0;
        fer(i, 1, 53) cnt += !stk[i].empty();
        if(cnt > 1) cout << cnt << " piles remaining: ";
        else cout << cnt << " pile remaining: ";
        fer(i, 1, 53){
            if(!stk[i].empty()) cout << stk[i].size() << ' ';
        }
        cout << '\n';
    }

    return 0;
}

标签:const,int,pos,Accordian,Patience,8008,define
From: https://www.cnblogs.com/Thin-time/p/18679016

相关文章

  • SiT8008BI-22-33E-50.000000D 标准时钟振荡器 3225 50MHz SiTime
    SiT8008BI-22-33E-50.000000D是SiTime公司出产的一款振荡器产品的类型。SiTime是一家专心于供给高性能、高精度、低功耗的振荡器解决方案的公司。是SiTime公司出产的一款振荡器产品的类型。SiTime是一家专心于供给高性能、高精度、低功耗的振荡器解决方案的公司。制造......
  • 中考英语首字母快速突破016-2021上海长宁英语二模-Coping Tips for Impatience-应对不
    PDF格式公众号回复关键字:ZKSZM016原文​Impatientpeopleareoftenseenasproudandself-important.Beingimpatientcanaffectyourrelationshipsatworkandathomenegatively(有害地).Peoplewillsenseangerfromyouandnotlike(71)dwithyouif......
  • Do you already have another mysqld server running on port: 8008 ?
    实现"Doyoualreadyhaveanothermysqldserverrunningonport:8008?"的步骤概述在解决问题之前,我们先了解一下整个问题的流程。下面是解决问题的步骤:步骤操作1检查是否已经有一个mysqld服务运行在8008端口2如果有,关闭该服务3如果没有,继续其他操作......
  • 2023-06-27 上传微信小程序报错:{"errcode":80082,"errmsg":"get plugin(id: wxxxxxxxx
    首先80082原因是你使用的一个id为wxxxxxxxxxxxxx的插件没有授权,所以就禁止你上传了,解决方案也很简单,只需在微信小程序后台==》设置==》第三方设置==》插件管理里面重新添加该插件即可。但是。如果这个id为wxxxxxxxxxxxxx的插件你搜索不到,嘿嘿,那就蛋疼了。你需要在代码里找出这个i......
  • 《GB28008-2011》PDF下载
    《GB28008-2011玻璃家具安全技术要求》PDF下载《GB28008-2011》简介本标准规定了玻璃家具的术语和定义、分类、要求、试验方法、检验规则、标志、使用说明、包装、运输......