b472 - NOIP2014 Day1.1.生活大爆炸版石头剪刀布
題目描述
題目描述了一種五種手勢的石頭剪刀布遊戲(石頭、剪刀、布、蜥蜴人、斯波克),並給出了勝負關係。小A和小B的出拳具有週期性,題目要求計算在N次猜拳後,小A和小B的得分。
解題思路
此題的核心在於模擬遊戲過程。首先,題目給定了五種手勢的勝負關係,可以將其儲存在一個二維陣列中。然後,根據小A和小B的出拳週期,計算每一輪的勝負,並更新對應的得分。由於出拳具有週期性,可以使用取模運算來確定每一輪的出拳。
複雜度分析
- 時間複雜度: O(N)
- 空間複雜度: O(1)
程式碼
#include <stdio.h>
int main(){
int n,na,nb,vs[5][5]={0,-1,1,1,-1,1,0,-1,1,-1,-1,1,0,-1,1,-1,-1,1,0,1,1,1,-1,-1,0};
while(scanf("%d%d%d",&n,&na,&nb)>0){
int a[na],b[nb],aw=0,bw=0;
for(int i=0;i<na;i++)
scanf("%d",&a[i]);
for(int i=0;i<nb;i++)
scanf("%d",&b[i]);
for(int i=0;i<n;i++){
if(vs[a[i%na]][b[i%nb]]==1)
aw++;
else if(vs[a[i%na]][b[i%nb]]==-1)
bw++;
}
printf("%d %d\n",aw,bw);
}
}