求助站外题90分1WA
  • 板块学术版
  • 楼主Dian_ed
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/2/1 11:38
  • 上次更新2023/10/24 02:15:30
查看原帖
求助站外题90分1WA
780213
Dian_ed楼主2023/2/1 11:38

Description

今天是星期天,小楠楠来找你玩“石头、剪刀、布游戏” 。你正在学习信息学, 所以想了一种需要编程来玩的“石头、剪刀、布游戏” 。首先,用数字 1,2,3 分 别表示出石头、剪刀、布。其次,你确定自己前 N 次“石头、剪刀、布”的出拳 方法,下面 N 次再次同样出拳,…,周而复始;也要求楠楠确定他前 M 次的出拳 方法,然后周而复始。问第 K 次后,你赢了几次? 例如:N=4,你的前 4 次出拳方式是“石头、剪刀、布、布” ,用数字表示即:”1 2 3 3”。M=5,楠楠前 5 次出拳方式是“剪刀、石头、石头、布、布” ,用数字表示即:”2 1 1 3 3”。K=10 时,情况如下表:

轮次12345678910
你出拳1233123312
楠楠出拳2113321133

你共赢了5次

Input Format

第一行 3 个整数 N,M,K。分别表示你出拳方式的周期长度、楠楠出拳方式的周 期长度和总共玩的次数。 第二行有 N 个整数,每个整数为 1、2、3 其中之一。 第三行有 M 个整数,每个整数为 1、2、3 其中之一。

Output Format

一个整数,表示 K 轮出拳后,你赢的次数。

输入数据1:

5 6 100 
1 3 2 2 1 
3 3 1 1 1 2

输出数据1:

29

Hint 数据范围:

8 个数据: N,M 的范围是[1..100],K 的范围是[1…100,000]。

2 个数据: N,M 的范围是[1..100],K 的范围是[1…1,000,000,000]

(友情提示)整数数组开的太大(比如 30,000,000)可能会因超空间而得 0 分。

我的代码:

#include<iostream>
using namespace std;
int a,b,n,cnt;
int main(){
    cin>>a>>b>>n;
    int c[a+1],d[b+1];
    for(int i=1;i<=a;i++)cin>>c[i];
    for(int i=1;i<=b;i++)cin>>d[i];
    int sum=a*b;
    if(a!=b){
    for(int i=1;i<=sum;i++){
        int j=i%a,h=i%b; 
        if(j==0)j=a; 
        if(h==0)h=b; 
        if((c[j]==1&&d[h]==2)||(c[j]==3&&d[h]==1)||(c[j]==2&&d[h]==3)){
            cnt++;
        }
    }
    int ans;
    ans=n/sum*cnt;
    int s=n%sum;
    if(s==0){
        cout<<cnt;
        return 0;
    }else{
        for(int i=1;i<=s;i++){
              int j=i%a,h=i%b; 
              if(j==0)j=a; 
              if(h==0)h=b; 
              if((c[j]==1&&d[h]==2)||(c[j]==3&&d[h]==1)||(c[j]==2&&d[h]==3)){
                  ans++;
              }
         }
        cout<<ans;
    }
    }else{
        for(int i=1;i<=a;i++){
            int j=i%a,h=i%b; 
            if(j==0)j=a; 
            if(h==0)h=b; 
            if((c[j]==1&&d[h]==2)||(c[j]==3&&d[h]==1)||(c[j]==2&&d[h]==3)){
                cnt++;
            }
        }
        int ans1;
        ans1=n%a*cnt;
        if(n%a==0){
            cout<<ans1;
            return 0;
        }else{
        int s1=n%a;
            for(int i=1;i<=s1;i++){
                int j=i%a,h=i%b; 
                if(j==0)j=a; 
                if(h==0)h=b; 
                if((c[j]==1&&d[h]==2)||(c[j]==3&&d[h]==1)||(c[j]==2&&d[h]==3)){
                    ans1++;
                }
            }
            cout<<ans1;
        }
    }
}

WA结果显示:读取到2,应为4。

90分啊,求助!

2023/2/1 11:38
加载中...