专栏文章
题解:P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
P1328题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @miql8548
- 此快照首次捕获于
- 2025/12/04 06:37 3 个月前
- 此快照最后确认于
- 2025/12/04 06:37 3 个月前
题目大意
是石头剪刀布多了两种出法,胜负关系正如题目中给的表格,给出两个人的猜拳周期和游戏局数,每一次赢的人得 分,输的得 分,平局两人都得 分,要我们求出最后两个人的总得分。
大体思路
可以看到游戏局数不大于 ,所以我们可以直接模拟得到。
一个思路简易的方法是把所有输赢关系都存到数组 里。
CPPsy[0][0]=0;
sy[0][1]=0;
sy[0][2]=1;
sy[0][3]=1;
sy[0][4]=0;
sy[1][0]=1;
sy[1][1]=0;
sy[1][2]=0;
sy[1][3]=1;
sy[1][4]=0;
sy[2][0]=0;
sy[2][1]=1;
sy[2][2]=0;
sy[2][3]=0;
sy[2][4]=1;
sy[3][0]=0;
sy[3][1]=0;
sy[3][2]=1;
sy[3][3]=0;
sy[3][4]=1;
sy[4][0]=1;
sy[4][1]=1;
sy[4][2]=0;
sy[4][3]=0;
sy[4][4]=0;
我这里和题目中一样, 表示剪刀, 表示石头, 表示布, 表示蜥蜴人, 表示斯波克。
然后按照周期模拟两个人所做出的手势,每次询问即可。
Code
CPP#include<bits/stdc++.h>
using namespace std;
int sy[5][5];
int a[205],b[205];
int main(){
int n,na,nb;
cin>>n>>na>>nb;
sy[0][0]=0;
sy[0][1]=0;
sy[0][2]=1;
sy[0][3]=1;
sy[0][4]=0;
sy[1][0]=1;
sy[1][1]=0;
sy[1][2]=0;
sy[1][3]=1;
sy[1][4]=0;
sy[2][0]=0;
sy[2][1]=1;
sy[2][2]=0;
sy[2][3]=0;
sy[2][4]=1;
sy[3][0]=0;
sy[3][1]=0;
sy[3][2]=1;
sy[3][3]=0;
sy[3][4]=1;
sy[4][0]=1;
sy[4][1]=1;
sy[4][2]=0;
sy[4][3]=0;
sy[4][4]=0;//我们先与处理出所有可能对局的输赢情况
for(int i=0;i<na;i++){
cin>>a[i];
}
for(int i=0;i<nb;i++){
cin>>b[i];
}
int suma=0,sumb=0;
for(int i=0;i<n;i++){
suma+=sy[a[i%na]][b[i%nb]];
sumb+=sy[b[i%nb]][a[i%na]];//按照周期模拟
}
cout<<suma<<" "<<sumb;//输出答案
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...