AcWing 1695. 果壳游戏

AcWing 1695. 果壳游戏

题目链接

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

思路:
玩游戏之前,1号位置放坚果壳1,2号位置放坚果壳2,3号位置放坚果壳3
石头放在某个位置上不动
游戏开始后,将两个坚果壳交换位置,然后猜石头在某个坚果壳下面,石头的位置是不动的。
如果某次交换后,猜石头在编号为 x 的坚果壳下面,只有石子位置在编号坚果为 x 的壳所在位置上的时候,才得分。
如果用 f[i] 保存编号为 i 的坚果壳的位置。猜编号为 x 的坚果壳,只有石子位置在 f[x] 的时候才得分。

AC代码

#include<bits/stdc++.h>
using namespace std;
int f[110],sum[110];
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) f[i]=i;
    for(int i=1;i<=n;i++)
    {
        int a,b,g;
        cin>>a>>b>>g;
        swap(f[a],f[b]); 
    //交换坚果壳 a b后,a坚果壳放在了原来b坚果壳的位置,b坚果壳放在了原来 a 坚果壳的位置
        sum[f[g]]++;
        //猜在c坚果壳中,c 坚果壳的位置为 f[c], 所以只有石子位置为 f[c] 的情况下,猜 c 坚果壳才得分
    }
    }
    cout<<max({sum[1],sum[2],sum[3]})<<endl;
    return 0;
}

如果觉得写的还不错,点个赞吧 ^ v ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值