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