'commit'
This commit is contained in:
51
TangDou/LuoGuBook/第8章模拟与高精度/P1328_2.cpp
Normal file
51
TangDou/LuoGuBook/第8章模拟与高精度/P1328_2.cpp
Normal file
@@ -0,0 +1,51 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user