果壳游戏Acwing

为了消磨时光,奶牛 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 下面,那么她没有猜对任何一次。

源代码

#include <iostream>
using namespace std;
int a[10]={0};//a数组记录三个坚果壳的移动情况
int b[10]={0};//b数组记录每个坚果壳被到的次数
int main()
{
	a[1]=1;//对坚果壳进行初始化
	a[2]=2;
	a[3]=3;
	int n;
	cin>>n;
	while(n--)
	{
		int m,n,g;
		cin>>m>>n>>g;
		swap(a[m],a[n]);//对于坚果壳进行移动
		for(int i = 1;i <= 3;i ++ )
		{
			if(i==g)
			{
				b[a[i]]++;//对坚果壳猜到的次数加一
				break;
			}
		}
	}
	int ans=-1;
	for(int i = 1;i <= 3;i ++ )
	{
		ans=max(ans,b[i]);//查最大猜到的次数
	}
	cout<<ans;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/couchpotatoshy/article/details/124525264