08:石頭剪刀布
總時間限制: 1000ms 記憶體限制: 65536kB
描述
石頭剪刀布是常見的猜拳遊戲。石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一樣,則不分勝負。
一天,小A和小B正好在玩石頭剪刀布。已知他們的出拳都是有周期性規律的,比如:“石頭-布-石頭-剪刀-石頭-布-石頭-剪刀……”,就是以“石頭-布-石頭-剪刀”為周期不斷循環的。請問,小A和小B比了N輪之後,誰赢的輪數多?
輸入
輸入包含三行。
第一行包含三個整數:N,NA,NB,分别表示比了N輪,小A出拳的周期長度,小B出拳的周期長度。0 < N,NA,NB < 100。
第二行包含NA個整數,表示小A出拳的規律。
第三行包含NB個整數,表示小B出拳的規律。
其中,0表示“石頭”,2表示“剪刀”,5表示“布”。相鄰兩個整數之間用單個空格隔開。
輸出
輸出一行,如果小A赢的輪數多,輸出A;如果小B赢的輪數多,輸出B;如果兩人打平,輸出draw。
樣例輸入
10 3 4
0 2 5
0 5 0 2
樣例輸出
A
提示
對于測試資料,猜拳過程為:
A:0 2 5 0 2 5 0 2 5 0
B:0 5 0 2 0 5 0 2 0 5
A赢了4輪,B赢了2輪,雙方打平4輪,是以A赢的輪數多。
#include<iostream>
using namespace std;
//http://noi.openjudge.cn/ch0106/08/
//這個的判斷有更簡單的方法嗎
int n,na,nb,ra=,rb=;
int a[],b[];
int f(int ka,int kb){
if((a[ka]==&&b[kb]==)||(a[ka]==&&b[kb]==)||(a[ka]==&&b[kb]==)){
return ;
}
else if(a[ka]==b[kb]){
return -;
}
else return ;
}
int main(){
cin>>n>>na>>nb;
for(int i=;i<na;i++){
cin>>a[i];
}
for(int i=;i<nb;i++){
cin>>b[i];
}
int ka=,kb=;
for(int i=;i<n;i++){
if(f(ka,kb)==){
ra++;
}
else if(f(ka,kb)==){
rb++;
}
ka=(ka+)%na;
kb=(kb+)%nb;
}
if(ra>rb)cout<<"A"<<endl;
else if(rb>ra)cout<<"B"<<endl;
else cout<<"draw"<<endl;
}