问题标题: 酷町堂:1060 田忌赛马

0
0
已解决
丁博扬
丁博扬
中级天翼
中级天翼

1060   田忌赛马经验值:0

题目描述 Description

田忌赛马的故事已家喻户晓,大家也耳熟能详,即是以不同的排列顺序来支配上中下三等马来赢得比赛,体现了一种博弈的思维。现如果稍改一下比赛的规则,田忌和齐威王都按照某一周期性规律出马对战,比如:“上-下-上-中-上-下-上-中……”,就是以“上-下-上-中”为周期不断循环。胜负还是以“上等马赢中等马和下等马,中等马赢下等马,若两只马等级一样,则打平”。请问经过N轮比赛之后,田忌和齐威王谁赢得次数多?

输入描述 Input Description

输入包含三行:
第一行为三个整数:N,NT,NQ,分别表示比了N轮,田忌出马对战的周期长度,齐威王出马对战的周期长度。N≤100,NT≤100,NQ ≤ 100。
第二行包含NT个整数,表示田忌出马对战的规律。
第三行包含NQ个整数,表示齐威王出马对战的规律。
其中,以“1”代表上等马;“2”代表中等马;“3”代表下等马。相邻两个整数之间用单个空格隔开。

输出描述 Output Description

输出一行,若田忌赢的次数多,输出T;若齐威王赢的次数多,输出Q;若两人打平,输出P。

样例输入 Sample Input

10 3 4 1 2 3 1 2 3 3

样例输出 Sample Output

T

数据范围及提示 Data Size & Hint

提示:
对于测试数据,出马对战的过程为:比赛10次,田忌以“上-中-下”顺序循环出战,齐威王以“上-中-下-下”顺序循环出战,其过程为:
T:1 2 3 1 2 3 1 2 3 1
Q:1 2 3 3 1 2 3 3 1 2
即:田忌:上-中-下-上-中-下-上-中-下-上
齐威王:上-中-下-下-上-中-下-下-上-中
则战果为:P - P - P -T -Q - Q - T -T- Q - T
则:平局3次,田忌赢了4次,齐威王赢了3次,比赛结果为田忌赢,输出T。

 

 

42分代码:

#include<iostream>
using namespace std;
int a[105],b[105],x,y,cnt1,cnt2,cnt,cnt3;
int main(){
    int a1,b1,c;
    cin>>a1>>b1>>c;
    for(int i=0;i<=a1-1;i++){
        cin>>a[i];
    }
    for(int i=0;i<=b1-1;i++){
        cin>>b[i];
    } 
    for(int i=0;i<=c-1;i++){
        long long x=a[i%a1],y=b[i%b1];
        if(x<y){
            cnt2++;
        }
        if(y<x){
            cnt1++;
        }
    }
    if(cnt1>cnt2){
        cout<<"Q";
    }
    else if(cnt1<cnt2){
        cout<<"T";
    }
    else{
        cout<<"P";
    }
    return 0;
}

求改错


0
已采纳
谭迪元
谭迪元
资深光能
资深光能

hi,@丁博扬

我是以前那个渣渣:

 

如今已升到高级守护

 

代码:

int a[110],b[110];

int n,l1,l2,q=0,t=0;

cin>>n>>l1>>l2;

for (int i=0;i<l1;i++)

cin>>a[i];

for (int i=0;i<l2;i++)

cin>>b[i];

for (int i=0;i<n;i++) {

if ((4-a[i%l1])>(4-b[i%l2]))

t++;

if ((4-a[i%l1])<(4-b[i%l2]))

q++;

}

if (t>q)

cout<<"T";

else if (q>t)

cout<<"Q";

else

cout<<"P";

 

采纳吧!!!

0
我要回答