[noip]2014複賽提高組day1 生活大爆炸剪刀石頭布
阿新 • • 發佈:2018-12-13
本蒟蒻自己想的方法,非常好,哈哈哈哈哈哈哈
#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; }