Mike_python小 发表于 2023-8-16 07:38:11

乒乓球 求解

https://www.luogu.com.cn/problem/P1042

#include <iostream>
#include<cmath>

using namespace std;

char a;

void ping(int num)
{
       
       
        int w=0;
        int l=0;
       
        for (int i=0;a!='\0';i++)
        {
                if(a == 'W')w++;
                if(a == 'L')l++;
               
                if ((w>=num || l>=num) && abs(w-l)>=2)
                {

                        cout << w << ":" << l << endl;
                        w=0;
                        l=0;

                }

        }
       
        if ((w>=0) || (l>=0))cout << w << ":" << l << endl;
       
       
}


int main()
{
        char n;
        int i=0;
       
        while (cin>>n&&n!='E')
        {

                if(n=='W'||n=='L')
                {
                        a = n;
                        i++;
                }
               
        }
       
        ping(11);
        cout << endl;
        ping(21);


       

}


求解测试点4,5,6,7 RE

isdkz 发表于 2023-8-16 07:38:47

在给出的代码中,出现RE错误可能是因为数组越界访问导致的。具体来说,代码中定义的字符数组 a 的大小为2509,但是在读取输入字符时,没有对数组的大小进行限制,可能会导致数组越界。

为了解决这个问题,可以在读取输入字符时,添加对数组大小的限制,确保不会越界访问。可以修改代码如下:

#include <iostream>
#include <cmath>

using namespace std;

char a;

void ping(int num)
{
    int w = 0;
    int l = 0;

    for (int i = 0; i < 2509 && a[ i] != '\0'; i++) {
      if (a[ i] == 'W')
            w++;
      if (a[ i] == 'L')
            l++;

      if ((w >= num || l >= num) && abs(w - l) >= 2) {
            cout << w << ":" << l << endl;
            w = 0;
            l = 0;
      }
    }

    if (w >= 0 || l >= 0)
      cout << w << ":" << l << endl;
}

int main()
{
    char n;
    int i = 0;

    while (cin >> n && n != 'E') {
      if (n == 'W' || n == 'L') {
            a[ i] = n;
            i++;
      }
    }

    ping(11);
    cout << endl;
    ping(21);

    return 0;
}


这样修改后的代码会在读取输入字符时,限制数组大小不超过2509,避免越界访问导致RE错误。

Mike_python小 发表于 2023-8-16 07:39:38

@tommyyu @zhangjinxuan {:10_266:}{:10_266:}

Mike_python小 发表于 2023-8-16 11:41:56

{:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:}

tommyyu 发表于 2023-8-16 11:42:21

我这题得了80{:10_269:}

Mike_python小 发表于 2023-8-16 11:50:58

tommyyu 发表于 2023-8-16 08:42
我这题得了80

我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben

tommyyu 发表于 2023-8-16 11:52:54

Mike_python小 发表于 2023-8-16 11:50
我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben

MLE 是什么{:10_277:}

tommyyu 发表于 2023-8-16 11:54:32

Mike_python小 发表于 2023-8-16 11:50
我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben

学习编程中的Ben 发表于 2023-8-16 19:40:54

#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int f = {11, 21};
int a, n = 0; char tmp;
int main() {
    while(1) {
      cin >> tmp;
      if(tmp == 'E') break;
      else if(tmp == 'W') a = 1;
      else if(tmp == 'L') a = 0;
    }
    for(int k = 0; k < 2; k++){
      int w = 0, l = 0;
      for(int i = 0; i < n; i++ ){
            w += a; l += 1 - a;
            if((max(w, l) >= f) && abs(w - l) >= 2){
                cout << w << ":" << l << endl; w = l = 0;
            }
      }
      cout << w << ":" << l << endl;
      cout << endl;
    }
    return 0;
}

学习编程中的Ben 发表于 2023-8-16 19:43:03

数组开到
25 * 2501 + 10

Ewan-Ahiouy 发表于 2023-8-17 18:45:49

re就是数组开小了{:10_256:}
页: [1]
查看完整版本: 乒乓球 求解