为了消磨时光,奶牛 Bessie 和她的朋友 Elsie 喜欢玩一种她们在农业展览会上看到的游戏。
游戏准备阶段,Bessie 在桌子上放置三个倒置的坚果壳,1号坚果壳放在位置1,2号坚果壳放在位置2,3号坚果壳放在位置3。并在其中一个坚果壳下面藏了一块小的鹅卵石(至少她希望这是一块鹅卵石——她在一块牧场的地上找到的)。
随后 Bessie 会两两调换坚果壳,鹅卵石会随着坚果壳一起移动,同时 Elsie 试着去猜鹅卵石的位置。
奶牛们在农业展览会上看到的这个游戏的标准形式是玩家可以看到鹅卵石初始的位置,然后要求玩家猜所有交换完成之后鹅卵石最终的位置。
然而,现在奶牛们想要去进行这样一种玩法,Elsie 不知道鹅卵石的初始位置,同时她可以在每一次交换之后猜一下鹅卵石的位置。
Bessie 知道正确答案,在游戏结束后会给 Elsie 一个分数,等于她猜对的次数。
给定所有的交换和 Elsie 的猜测,但是不给出鹅卵石的初始位置,请求出 Elsie 最高可能获得的分数。
输入格式
输入的第一行包含一个整数 NN,为交换的次数。
以下 NN 行每行描述了游戏的一个回合,包含三个整数 a、ba、b 和 gg,表示 Bessie 交换了位置 aa 和 bb 的坚果壳,然后 Elsie 猜的是位置 gg。
所有这三个数均为 1、2、31、2、3 之一,并且 a≠ba≠b。
输出格式
数据范围
输入样例:
输出样例:
样例解释
在这个例子中,Elsie 最多可以获得 22 分。
如果鹅卵石开始时位于坚果壳 11 下面,那么她猜中了一次(最后一次)。
如果鹅卵石开始时位于坚果壳 22 下面,那么她猜中了两次(开始两次)。
如果鹅卵石开始时位于坚果壳 33 下面,那么她没有猜对任何一次。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int p[4] = {0, 1, 2, 3}; //第1个位置是1号坚果
int res[4] = {0};
while (n --) {
int a, b, g; //a, b 为交换的坚果, g为猜测的位置
cin >> a >> b >> g;
swap(p[a], p[b]);
//猜测的位置为p[g] res[p[g]]表示开始石子在该位置下的得分
res[p[g]]++;
}
cout << max(res[1], max(res[2], res[3])) << endl;
return 0;
}