题目 3341: 蓝桥杯2025年第十六届省赛真题-抽奖

发布于:2025-05-29 ⋅ 阅读:(19) ⋅ 点赞:(0)

题目 3341: 蓝桥杯2025年第十六届省赛真题-抽奖
时间限制: 2s 内存限制: 192MB 提交: 415 解决: 105
题目描述
LQ 商场为了回馈广大用户,为在此消费的用户提供了抽奖机会:抽奖机有三个转轮,每个转轮上都分布有 n 个数字图案,标号为 1 ∼ n ,按照从 1 到 n 顺序转动,当转到第 n 个图案时会从第一个继续开始。奖项如下: 

1)三个相同的图案,积分 +200 ; 

2)两个相同的图案,积分 +100 ; 

3)三个数字图案,从左到右连续(例如 1, 2, 3 ),积分 +200 ; 

4)三个数字图案,经过顺序调整后连续(例如 2, 1, 3 或 3, 2, 1 ),积分 +100 ; 

抽奖机处于初始状态,三个转轮都处于第一个位置。每次开始抽奖,都会 产生三个对应的随机数 xi1, xi2, xi3 ,表示第 j 个转轮会向后转动 xi j 次停下。下 次抽奖时,转轮会从上一次转动后的位置开始继续转动。 注意,一次抽奖最多只能获得一次积分,如果同时命中多个奖项,以积分最大的那个奖项为准。 

请问,如果执行 m 次抽奖,总积分值是多少?

输入格式
输入的第一行包含一个正整数 n ,表示转轮大小。 

第二行包含 n 个正整数 a1, a2, · · · , an ,依次表示第一个转轮上的数字图案, 相邻整数之间使用一个空格分隔。 

第三行包含 n 个正整数 b1, b2, · · · , bn ,依次表示第二个转轮上的数字图案, 相邻整数之间使用一个空格分隔。 

第四行包含 n 个正整数 c1, c2, · · · , cn ,依次表示第三个转轮上的数字图案, 相邻整数之间使用一个空格分隔。 

第五行包含一个整数 m ,表示抽奖次数。

接下来 m 行,每行包含三个正整数 xi1, xi2, xi3 ,相邻整数之间使用一个空格分隔。

输出格式
输出一行包含一个整数表示答案,即 m 次抽奖累计获得的积分的值。

样例输入复制
4
3 2 4 1
2 2 2 2
4 3 0 9
3
4 4 4
3 1 1
40 39 2
样例输出复制
300
提示
【样例说明】 

三个转轮在初始状态下都在位置 1 。 

第一次抽奖,三个转轮都转动 4 次,都转一整圈到达位置 1 ,三个转轮上 的数字图案分别是 3、2、4 ,积分 +100 ; 

第二次抽奖,第一个转轮转动 3 次到达位置 4 ,第二个转轮转动 1 次到达 位置 2 ,第三个转轮转动 1 次到达位置 2 ,三个转轮上的数字图案分别是 1、 2、3 ,积分 +200 ; 

第三次抽奖,第一个转轮转动 40 次到达位置 4 ,第二个转轮转动 39 次到 达位置 1 ,第三个转轮转动 2 次到达位置 4 ,三个转轮上的数字图案分别是 1、 2、9 ,积分不增加。 

因此总积分为 300 。

【评测用例规模与约定】 

对于 20% 的评测用例,1 ≤ n ≤ 5 ,0 ≤ m ≤ 5 ; 

对于 40% 的评测用例,1 ≤ n ≤ 10 ,0 ≤ m ≤ 10 ; 

对于 60% 的评测用例,1 ≤ n ≤ 100 ,0 ≤ m ≤ 100 ; 

对于 80% 的评测用例,1 ≤ n ≤ 200 ,0 ≤ m ≤ 200 ; 

对于所有评测用例,1 ≤ n ≤ 103 ,0 ≤ m ≤ 103 ,0 ≤ ai , bi , ci ≤ 9 , 1 ≤ xi j ≤ 1000 。

1.分析

        模拟即可,由于取余,可以交换a[0]和a[n]的位置。

2.代码

#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
const int MAX = 1e3 + 10;
typedef long long LL;
int a[MAX], b[MAX], c[MAX],re[MAX];
int n,m, A = 1, B = 1, C = 1;
int s;
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];
    }
    a[0] = a[n];
    b[0] = b[n];
    c[0] = c[n];
    cin >> m;
    while (m--) {
        int x, y, z;
        cin >> x >> y >> z;
        A = (A + x) % (n);
        re[0] = a[A];
        B = (B + y) % (n);
        re[1] = b[B];
        C = (C + z) % (n);
        re[2] = c[C];
        if (re[0]==re[1]&&re[1]==re[2]) {
            s += 200;
        }
        else if (re[0] == re[1] || re[1] == re[2] || re[0] == re[2]) {
            s += 100;
        }
        else if (re[0] + 1 == re[1] && re[1] + 1 == re[2]) {
            s += 200;
        }
        else {
            sort(re, re + 3);
            if (re[0] + 1 == re[1] && re[1] + 1 == re[2]) {
                s += 100;
            }
        }
    }
    cout << s << endl;
    return 0;
}


网站公告

今日签到

点亮在社区的每一天
去签到