模拟
先把出拳长度不断拓展至其超过出拳次数,然后直接判断即可。
划水代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 200
using namespace std;
int n,na,nb;
int a[MAXN*5+5],b[MAXN*5+5];
int pd[5][5]={{0,1,2,2,1},{2,0,1,2,1},{1,2,0,1,2},{1,1,2,0,2},{2,2,1,1,0}};
int main(){
scanf("%d%d%d",&n,&na,&nb);
for (int i=1;i<=na;i++) scanf("%d",&a[i]);
for (int i=1;i<=nb;i++) scanf("%d",&b[i]);
int nna=na,nnb=nb;
while (na<n){
for (int i=1;i<=nna;i++) a[i+na]=a[i]; na+=nna;
}
while (nb<n){
for (int i=1;i<=nnb;i++) b[i+nb]=b[i]; nb+=nnb;
}
int sa=0,sb=0;
for(int i=1;i<=n;i++){
int re=pd[a[i]][b[i]];
if (re==2) sa++;
if (re==1) sb++;
}
printf("%d %d\n",sa,sb);
return 0;
}