天天看點

08:石頭剪刀布08:石頭剪刀布

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;
}
           

繼續閱讀