题解:P12140 [蓝桥杯 2025 省 A] 抽奖

· · 题解

审核辛苦了喵~

蒟蒻的第一篇题解!

题目传送门

思路

题意表述很清晰了,一共有 4 种中奖情况,由于数据量不大,直接每种情况枚举检测即可。

注意到一次抽奖最多只能获得一次积分,如果同时命中多个奖项,以积分最大的那个奖项为准。于是优先判断 200 分的情况,如果 200 分没中奖再判断 100 分的。

代码

#include <bits/stdc++.h>
using namespace std;

int A = 1, B = 1, C = 1, pts; //记录当前三个转盘的图案,以及累计积分
int n, a[1024], b[1024], c[1024]; //记录三个转盘上的所有图案
int m, x1[1024], x2[1024], x3[1024]; //记录每次转动转过了几个图案

//对应题干第一种中奖情况
bool check1 (int p, int q, int r){
    if (p == q && q == r) return true;
    return false;
}

//对应题干第三种中奖情况
bool check2 (int p, int q, int r){
    if (q == p + 1 && r == q + 1) return true;
    return false;
}

//对应题干第二种中奖情况
bool check3 (int p, int q, int r){
    if (p == q || q == r || p == r) return true;
    return false;
}

//对应题干第四种中奖情况
bool check4 (int p, int q, int r){
    if(q == p + 1 && r == q + 1) return true;
    if(r == p + 1 && q == r + 1) return true;
    if(p == q + 1 && r == p + 1) return true;
    if(r == q + 1 && p == r + 1) return true;
    if(p == r + 1 && q == p + 1) return true;
    if(q == r + 1 && p == q + 1) return true;
    return false;
}

int main(){
    cin >> n;
    for(int i = 1; i <= n; i++){
        cin >> a[i];
    }
    for(int i = 1; i <= n; i++){
        cin >> b[i];
    }
    for(int i = 1; i <= n; i++){
        cin >> c[i];
    }
    cin >> m;
    for (int i = 1; i <= m; i++){
        cin >> x1[i] >> x2[i] >> x3[i];
    }
    for (int i = 1; i <= m; i++){
        A += x1[i];
        B += x2[i];
        C += x3[i];
        A %= n;
        B %= n;
        C %= n; //考虑到转盘转过的角度可能超过一圈,避免溢出
        if (A == 0) A = n;
        if (B == 0) B = n;
        if (C == 0) C = n; //0索引为空,重新定向至n索引

        //依次判断各中奖情况
        if (check1(a[A], b[B], c[C])){
            pts += 200;
            continue;
        }
        else if (check2(a[A], b[B], c[C])){
            pts += 200;
            continue;
        }
        else if (check3(a[A], b[B], c[C])){
            pts += 100;
            continue;
        }
        else if (check4(a[A], b[B], c[C])){
            pts += 100;
            continue;
        }
    }
    cout << pts; //输出答案

    return 0;
}