题解 AT2066 [ABC045B] 3人でカードゲームイージー / Card Game for Three (ABC Edit)
Kevin_Zhen · · 题解
挑战本题最短码量
变量介绍
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;
}