ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

2021-11-22 15:36:46  阅读:190  来源: 互联网

标签:表示 NOIP2014 int 胜负 n1 n2 P1328 剪刀 出拳


题目传送门
//P1328.cpp

#include <bits/stdc++.h>

using namespace std;
const int N = 210;
//0 表示“剪刀”,1 表示“石头”,2 表示“布”,3 表示“蜥蜴人”,4表示“斯波克”。
//看图打表写出对阵双方的胜负平结果二维数组
//这个胜负平表是关键
int g[5][5] = {
        {0, 0, 1, 1, 0},
        {1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1},
        {0, 0, 1, 0, 1},
        {1, 1, 0, 0, 0}
};

int n;      //表示进行N次猜拳
int n1;     //小A出拳的周期长度
int n2;     //小B出拳的周期长度
int na[N];  //表示小A出拳的规律
int nb[N];  //表示小B出拳的规律
int s1;     //小A赢几次
int s2;     //小B赢几次

int main() {
    //数据读入
    cin >> n >> n1 >> n2;
    for (int i = 0; i < n1; i++)cin >> na[i];
    for (int i = 0; i < n2; i++)cin >> nb[i];

    //开始猜拳
    for (int i = 0; i < n; i++) {
        //这一轮小A出的是啥?
        int a = na[i % n1]; //n1为循环的长度,所以每一轮后,都需要mod n1
        //这一轮小B出的是啥?
        int b = nb[i % n2]; //n2为循环的长度,所以每一轮后,都需要mod n2

        s1 += g[a][b];      //根据事先推出的胜负平表,找出胜负平关系,累加到小A的得分中。
        s2 += g[b][a];      //根据事先推出的胜负平表,找出胜负平关系,累加到小A的得分中。
    }
    cout << s1 << " " << s2 << endl;
    return 0;
}

//P1328_2.cpp

#include <bits/stdc++.h>

using namespace std;
const int N = 210;

//本文件是示例数组下标从1开始如何计算
//数组下标从1开始时,需要注意的问题: 前n-1个用MOD没有问题,关键是n的倍数时,需要输出n,而不是0,这个与下标从0开始时有区别!

//0 表示“剪刀”,1 表示“石头”,2 表示“布”,3 表示“蜥蜴人”,4表示“斯波克”。
//看图打表写出对阵双方的胜负平结果二维数组
//这个胜负平表是关键
int g[5][5] = {
        {0, 0, 1, 1, 0},
        {1, 0, 0, 1, 0},
        {0, 1, 0, 0, 1},
        {0, 0, 1, 0, 1},
        {1, 1, 0, 0, 0}
};

int n;      //表示进行N次猜拳
int n1;     //小A出拳的周期长度
int n2;     //小B出拳的周期长度
int na[N];  //表示小A出拳的规律
int nb[N];  //表示小B出拳的规律
int s1;     //小A赢几次
int s2;     //小B赢几次

int main() {
    //数据读入
    cin >> n >> n1 >> n2;
    for (int i = 1; i <= n1; i++)cin >> na[i];
    for (int i = 1; i <= n2; i++)cin >> nb[i];

    //开始猜拳
    for (int i = 1; i <= n; i++) {
        //这一轮小A出的是啥?
        int a = na[i % n1 == 0 ? n1 : i % n1]; //n1为循环的长度,所以每一轮后,都需要mod n1
        //这一轮小B出的是啥?
        int b = nb[i % n2 == 0 ? n2 : i % n2]; //n2为循环的长度,所以每一轮后,都需要mod n2

        s1 += g[a][b];      //根据事先推出的胜负平表,找出胜负平关系,累加到小A的得分中。
        s2 += g[b][a];      //根据事先推出的胜负平表,找出胜负平关系,累加到小A的得分中。
    }
    cout << s1 << " " << s2 << endl;
    return 0;
}

标签:表示,NOIP2014,int,胜负,n1,n2,P1328,剪刀,出拳
来源: https://www.cnblogs.com/littlehb/p/15588759.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有