1 条题解
-
0
solve
容易看出,当一开始鹅卵石的位置确定后,以后每次交换之后鹅卵石的位置都是固定的。因此考虑分别枚举刚开始时鹅卵石在三个坚果壳中的哪一个,依次计算在每种情况下的得分数,最后取最大值即可。
我们可以建立三个布尔数组,分别对应最开始时鹅卵石的三种位置。
对于每个数组,将鹅卵石所处位置标记为 ,其他位置标记为 。
对于每次交换,直接将两个位置的标记值换一下就可以了。
#include <bits/stdc++.h> using namespace std; int q; bool stone1[4],stone2[4],stone3[4]; //三种情况 int score1,score2,score3; int main() { scanf("%d",&q); int a,b,g; stone1[1]=1,stone2[2]=1,stone3[3]=1; //刚开始时石头的位置 while(q--){ scanf("%d%d%d",&a,&b,&g); swap(stone1[a],stone1[b]); //换位置 swap(stone2[a],stone2[b]); swap(stone3[a],stone3[b]); if(stone1[g]==1)score1++; //判得分 if(stone2[g]==1)score2++; if(stone3[g]==1)score3++; } //取最大值 cout<<max(max(score1,score2),score3)<<endl; return 0; }
- 1
信息
- ID
- 6963
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 69
- 已通过
- 24
- 上传者