生活大爆炸版石头剪刀布
思路
- 数字化选择方式
- 纯手抄一个
map<pair<int, int>, int> mp用来记录出拳结果。如mp[{2,0}] = 2;表示b赢了 - 直接取余数组处理得到结果
题解
#include <bits/stdc++.h>
using namespace std;
int main()
{
// 0 表示 剪刀,
// 1 表示 石头,
// 2 表示 布,
// 3 表示 蜥蜴人,
// 4 表示 斯波克
// 结果0表示平局,1表示a赢,2表示b赢
map<pair<int, int>, int> mp;
int n,na,nb;
int result[3]={0}; //0无意义,1为a分数,2为b分数
cin >> n >> na >> nb;
vector<int> a(na),b(nb);
for (int i=0;i<na;i++)
{
cin >> a[i];
}
for (int i=0;i<nb;i++)
{
cin >> b[i];
}
for(int i=0;i<5;i++)
{
mp[{i,i}] = 0;
}
mp[{2,0}] = 2;
mp[{3,0}] = 2;
mp[{3,1}] = 2;
mp[{4,2}] = 2;
mp[{4,3}] = 2;
mp[{1,0}] = 1;
mp[{2,1}] = 1;
mp[{3,2}] = 1;
mp[{4,0}] = 1;
mp[{4,1}] = 1;
mp[{0,2}] = 1;
mp[{0,3}] = 1;
mp[{1,3}] = 1;
mp[{2,4}] = 1;
mp[{3,4}] = 1;
mp[{0,1}] = 2;
mp[{1,2}] = 2;
mp[{2,3}] = 2;
mp[{0,4}] = 2;
mp[{1,4}] = 2;
for(int i=0;i<n;i++)
{
int xi = i%na;
int x = a[i%na];
int y = b[i%nb];
result[mp[{x,y}]]++;
}
cout << result[1] << " " << result[2] << endl;
return 0;
}
优化
看了别人的题解,大多是用一个二维[5][5]的数组存储对局输赢,后面处理简单一些。