题解 AT2066 [ABC045B] 3人でカードゲームイージー / Card Game for Three (ABC Edit)

· · 题解

挑战本题最短码量

变量介绍

1.s[]为本题的三个字符串,Alice的下标为0,Bob为1,Charlie为2。
2.p[]为当前牌堆顶指针。
3.k记录当前要从哪个牌堆抽牌(因为Alice先开始,所以初值为0)。

思路

刚开始先判断当前牌堆是否已空,空的话输出,跳出循环。
具体实现是看当前牌堆顶指针是否已经指到len[k]处。

if (p[k] == len[k]) {
    printf("%c\n", k + 'A');
    break;
}

倘若非空的话,把k指向当前牌堆顶的字母所指的牌堆,同时当前牌堆顶指针后移一位。

k = s[k][p[k]++] - 'a';

AC CODE

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;

string s[3];
int p[3];
int len[3];
int k = 0;

int main() {
    for (int i = 0; i < 3; ++i) cin >> s[i], len[i] = s[i].size();
    while (1) {
        if (p[k] == len[k]) {
            printf("%c\n", k + 'A');
            break;
        }
        k = s[k][p[k]++] - 'a';
    }
    return 0;
}

完结撒花!★,°:.☆( ̄▽ ̄)/$:.°★