# Array# Simulation# Modulo Operator

b472 - NOIP2014 Day1.1.生活大爆炸版石头剪刀布

🔗 前往 ZeroJudge 原題

題目描述

題目描述了一種五種手勢的石頭剪刀布遊戲(石頭、剪刀、布、蜥蜴人、斯波克),並給出了勝負關係。小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);
	}
}

Discussion