<< 本蒟蒻写篇题解不易,轻点一下这里吧~
y总啥时候这么仁慈,又是道氵题
此题我参考了一下AcWing2AK大佬的程序……
代码太简洁,怕大家看不懂
分析
首先,我们从样例入手,仔细分析样例解释
在这个例子中,Elsie 最多可以获得 2 分。
如果鹅卵石开始时位于坚果壳 $1$ 下面,那么她猜中了一次(最后一次)。
如果鹅卵石开始时位于坚果壳 $2$ 下面,那么她猜中了两次(开始两次)。
如果鹅卵石开始时位于坚果壳 $3$ 下面,那么她没有猜对任何一次。
样例解释其实就告诉了你该如何写代码了
方法就是一个个是试过去,反正只有三种可能:初始位置在 $1$ , $2$ 或 $3$
这样一来,我们可以用一个数组 $v$ 来表示三个果壳
其次,题目中说到交换两个果壳,我们就可以用 $swap$ 来模拟
然后再累加猜的次数,用一个数组 $s$ 来存储
最后只要输出 $s[1]$ , $s[2]$ , $s[3]$ 中的最大值就OK了
根据这个思路,代码就会变的很简洁,清晰了
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int v[10001],s[10001];
int main(){
int n;
cin>>n;
for(int i=1;i<=3;i++) v[i]=i; //初始化v
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
swap(v[a],v[b]); //交换的过程
s[v[c]]++; //猜c的次数累加
}
cout<<max(s[1],max(s[2],s[3])); //最后输出s[1],s[2],s[3]中的最大值
return 0;
}
写完后看了看AcWing2AK大佬的程序,突然感觉自己的程序好拉,于是优化了一下……
#
我是蒟蒻