1. 程式人生 > >[noip]2014複賽提高組day1 生活大爆炸剪刀石頭布

[noip]2014複賽提高組day1 生活大爆炸剪刀石頭布

本蒟蒻自己想的方法,非常好,哈哈哈哈哈哈哈

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,na,nb,a[50000],b[50000],fl[20000][20000],qja[20000],qjb[20000];/*我就是在這個地方入坑,看了資料之後覺得開的小,後來我這個方法擴充套件了一下陣列,導致了RE。*/
int p,q,ansa,ansb;
int main()
{
	freopen("rps.in","r",stdin);
	freopen("rps.out","w",stdout);
	cin>>n>>na>>nb;
	for(int i=1;i<=na;i++) cin>>a[i];
	for(int i=1;i<=nb;i++) cin>>b[i];
	for(int i=0;i<5;i++)
	 for(int j=0;j<5;j++)
	  if(i==j) fl[i][j]=9999;
	fl[0][2]=1;fl[0][3]=1;//誰強,誰爆炸一波
	fl[1][0]=1;fl[1][3]=1;
	fl[2][1]=1;fl[2][4]=1;
	fl[3][2]=1;fl[3][4]=1;
	fl[4][0]=1;fl[4][1]=1;
	for(int i=1;i<=na;i++)
	 for(int j=1;j<=nb;j++)
	 {
	   a[i+na*j]=a[i];//擴充套件陣列a
	 }
	for(int i=1;i<=nb;i++)
	 for(int j=1;j<=na;j++)
	  {
	  	b[i+nb*j]=b[i];//擴充套件陣列b
	  }
	for(int i=1;i<=na*nb;i++)//巧妙運用字首和,啊哈哈哈哈
	 {
	 	if(fl[a[i]][b[i]]==1)
	 	 {qja[i]=qja[i-1]+1;qjb[i]=qjb[i-1];}
	 	if(fl[a[i]][b[i]]==0)
		 {qja[i]=qja[i-1];qjb[i]=qjb[i-1]+1;}
		if(fl[a[i]][b[i]]==9999)
		 {qja[i]=qja[i-1];qjb[i]=qjb[i-1];}  
	 }
	p=n/(na*nb);
	q=n%(na*nb);
	ansa=qja[na*nb]*p+qja[q];
	ansb=qjb[na*nb]*p+qjb[q];
	cout<<ansa<<" "<<ansb;
	fclose(stdin);fclose(stdout);
	return 0;
}