1 条题解

  • 0
    @ 2025-8-24 23:13:04

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar EndeavourCHN
    3068364094

    搬运于2025-08-24 23:13:04,当前版本为作者最后更新于2025-04-15 13:19:51,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    审核辛苦了喵~

    蒟蒻的第一篇题解!

    题目传送门

    思路

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

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

    代码

    #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;
    }
    
    • 1

    信息

    ID
    11996
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者