【14年NOIP提高组】 生活大爆炸版剪刀石头布30分求助
  • 板块学术版
  • 楼主yljx
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/28 11:37
  • 上次更新2023/10/27 18:03:05
查看原帖
【14年NOIP提高组】 生活大爆炸版剪刀石头布30分求助
381510
yljx楼主2022/7/28 11:37

各位dalao好,这题应该暴力就能做,我也是这么写的,可是样例过了,测试只有30分,求助!

#include<bits/stdc++.h>
using namespace std;
int rule[10][10]={{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}};
// rule[a][b]代表小a出a,小b出b的胜负结果
int n,na,nb;
int a[210],b[210];

int main(){
	freopen("in.cpp","r",stdin);
	cin>>n>>na>>nb;
	a[0]=na; b[0]=nb;
	for(int i=1;i<=na;i++)cin>>a[i];
	for(int i=1;i<=nb;i++)cin>>b[i];
	for(int i=1;i<=200;i++){//将小a的周期性出拳复制进a数组,把小a的所有出拳记录
		if(a[0]+na<=n){
			for(int j=a[0]+1;j<=a[0]+na;j++) a[j]=a[j-a[0]];
			a[0]+=na;
		}else{
			for(int j=a[0]+1;j<=n;j++) a[j]=a[j-a[0]];
			break;
		}
	}
	for(int i=1;i<=200;i++){//同上
		if(b[0]+nb<=n){
			for(int j=b[0]+1;j<=b[0]+nb;j++) b[j]=b[j-b[0]];
			b[0]+=nb;
		}else{
			for(int j=b[0]+1;j<=n;j++) b[j]=b[j-b[0]];
			break;
		}
	}	
	int ans1=0,ans2=0;
	for(int i=1;i<=n;i++){//记录结果
		if(rule[a[i]][b[i]]==-1)ans2++;//小a出a[i],小b出b[i]的胜负结果
		if(rule[a[i]][b[i]]==1)ans1++;
	}
	cout<<ans1<<" "<<ans2;
}

希望dalao们帮帮忙,谢谢!

2022/7/28 11:37
加载中...