洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布

题目大意

小A和小B,要进行 \(N\) 次猜拳,每次按照一定周期出拳,胜负情况如下:

求出小A和小B分别赢了几次。

思路

枚举 \(N\) 次猜拳,每次比较 \(a[powera]\)\(b[powerb]\) (poewra 与 powerb 是 a 和 b 数组的索引,详见代码)。

CODE

#include<bits/stdc++.h>
using namespace std;
int a[2005], b[2005];
int main(){
	int n, na, nb, ansa  = 0, ansb = 0;
	cin >> n >> na >> nb;
	for (int i = 1; i <= na; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= nb; i++) {
		cin >> b[i];
	}
	int powera = 1, powerb = 1; 
	for (int i = 1; i <= n; i++) {
		if (powera > na) { //超过周期长度的特判 
			powera = 1;
		}
		if (powerb > nb) {
			powerb = 1;
		}
		if (a[powera] == 0) {
			if (b[powerb] == 1) {
				ansb++;
			}
			if (b[powerb] == 2) {
				ansa++;
			}
			if (b[powerb] == 3) {
				ansa++;
			}
			if (b[powerb] == 4) {
				ansb++;
			}
		}
		if (a[powera] == 1) {
			if (b[powerb] == 0) {
				ansa++;
			}
			if (b[powerb] == 2) {
				ansb++;
			}
			if (b[powerb] == 3) {
				ansa++;
			}
			if (b[powerb] == 4) {
				ansb++;
			}
		}
		if (a[powera] == 2) {
			if (b[powerb] == 0) {
				ansb++;
			}
			if (b[powerb] == 1) {
				ansa++;
			}
			if (b[powerb] == 3) {
				ansb++;
			}
			if (b[powerb] == 4) {
				ansa++;
			}
		}
		if (a[powera] == 3) {
			if (b[powerb] == 0) {
				ansb++;
			}
			if (b[powerb] == 1) {
				ansb++;
			}
			if (b[powerb] == 2) {
				ansa++;
			}
			if (b[powerb] == 4) {
				ansa++;
			}
		}
		if (a[powera] == 4) {
			if (b[powerb] == 0) {
				ansa++;
			}
			if (b[powerb] == 1) {
				ansa++;
			}
			if (b[powerb] == 2) {
				ansb++;
			}
			if (b[powerb] == 3) {
				ansb++;
			}
		}
		powera++;
		powerb++;
	} 
	cout << ansa << " " << ansb << endl;
	return 0;
}
posted @ 2024-09-01 20:04    阅读(143)  评论(0)    收藏  举报