问题标题: 酷町堂:怎么让5258的代码不超时

0
0
已解决
宫成
宫成
中级守护
中级守护

题目链接: 酷町堂:5258

5258   猜拳游戏3

经验值:1200 时间限制:1000毫秒

题目描述 Description

酷酷和丁丁玩猜拳,两人都按照一定的规律出拳,我们用A,B,C分别表示石头,剪刀,布。比如酷酷出拳的规律是“ABBC”,即他按照“石头,剪刀,剪刀,布,石头,剪刀,剪刀,布,……” 的顺序不断出拳。
现在给出两个人的出拳规律,以及比赛的局数n,请你算出猜了n局之后,谁获胜?

输入描述 Input Description

输入两行字符串,分别表示酷酷和丁丁出拳的规律;
第三行输入一个正整数n,表示猜拳的局数。

输出描述 Output Description

如果酷酷赢的局数多,输出“酷酷赢”以及赢的局数,空格隔开;
如果丁丁赢的局数多,输出“丁丁赢”以及赢的局数,空格隔开;
如果打成平局,则输出“平局”。

样例输入 Sample Input

ABC AB 5

样例输出 Sample Output

酷酷赢 2

数据范围及提示 Data Size & Hint

字符串长度不超过100,n<=1000000000

#include<iostream>

using namespace std;

int n,na,nb,A,B;

string a,b;

int ju(char a,char b){

    if(a=='A'&&b=='B'||a=='B'&&b=='C'||a=='C'&&b=='A') return 1;

    if(b=='A'&&a=='B'||b=='B'&&a=='C'||b=='C'&&a=='A') return -1;

    return 0;

}

int main(){

    cin>>a>>b>>n;

    na=a.size();

    nb=b.size();

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

        if(ju(a[i%na],b[i%nb])==1) A++;

        if(ju(a[i%na],b[i%nb])==-1) B++;

    }

    if(A>B) cout<<"酷酷赢 "<<A;

    else if(B>A) cout<<"丁丁赢 "<<B;

    else cout<<"平局";

    return 0;

}


0
已采纳
沈峻宇
沈峻宇
资深天翼
资深天翼

简单

找找周期

周期次数为T

然后比分遍历周期算分,乘上周期的局数

最后再遍历不是周期的局数

代码:

一定要理解,思路讲过了,一定不能直接抄

沈峻宇在2021-11-01 19:08:30追加了内容

注意,不是按照你的变量

0
0
李子杰
李子杰
资深光能
资深光能

要找周期中的周期,找两个周期的最小公倍数。

我要回答