1 条题解

  • 0
    @ 2026-5-19 0:52:51

    solve

    容易看出,当一开始鹅卵石的位置确定后,以后每次交换之后鹅卵石的位置都是固定的。因此考虑分别枚举刚开始时鹅卵石在三个坚果壳中的哪一个,依次计算在每种情况下的得分数,最后取最大值即可。

    我们可以建立三个布尔数组,分别对应最开始时鹅卵石的三种位置。

    对于每个数组,将鹅卵石所处位置标记为 11,其他位置标记为 00

    对于每次交换,直接将两个位置的标记值换一下就可以了。

    #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
    上传者