おみやげをまらいました!
蛙蛙还是给你带来了礼物。但它有个小小的要求,那就是你得在石头剪刀布上赢过它才能拿到礼物哦!
你们这样规定:有三个字符串 现在根据你的观察,你已经知道了蛙蛙心想的出拳顺序,你需要安排自己的出拳顺序,使得你能在每一局中都获胜。
“焼きまんじゅう”、“ういろう”、“⽡せんべい”、“福だるま”、“⽉うさぎのボタン”……
前三行每行两个字符串,每行,表示
能打败
。
数据保证不互相矛盾,且其中有恰好三种不同的字符串。
接下去一个数,表示
次对战。
接下去行每行一个字符串,表示蛙蛙的出拳种类。注意,蛙蛙的出拳可能不合法(即不是三种字符串中的),这时请输出
。
共行,每行一个字符串,表示每一局你需要出什么。
如果对手出的不合法,输出。
stone sci sci paper paper stone 4 stone sci spock paper
paper stone Fake sci
#define AUTHOR "JiangXiangyu"
#define IOV_CMP(a, b) ((a).iov_len == (b).iov_len && !memcmp((a).iov_base, (b).iov_base, (a).iov_len))
const struct iovec fake = {"Fake\n", 5};
struct iovec s[3][2]; // 赢者(输出)-输者(输入)对照关系
struct iovec ans[100];
int main() {
read_prepare(); // 输入内存映射
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
s[i][j] = read_iovec();
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j) continue;
if (IOV_CMP(s[i][0], s[j][1])) { // 两者内容相同
s[i][0] = s[j][1];
s[i][0].iov_len++; // 输入中s[j][1]的下个字符是换行符
break;
}
}
}
int n = read_uint();
for (int i = 0; i < n; i++) {
struct iovec input = read_iovec();
for (int j = 0; j < 3; j++) {
if (IOV_CMP(input, s[j][1])) {
ans[i] = s[j][0]; // 输出带换行符
break;
}
}
if (!ans[i].iov_base) ans[i] = fake;
}
writev(STDOUT_FILENO, ans, n);
return 0;
}