乒乓球 求解
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 在给出的代码中,出现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错误。 @tommyyu @zhangjinxuan {:10_266:}{:10_266:} {:10_266:}{:10_266:}{:10_266:}{:10_266:}{:10_266:} 我这题得了80{:10_269:} tommyyu 发表于 2023-8-16 08:42
我这题得了80
我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben Mike_python小 发表于 2023-8-16 11:50
我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben
MLE 是什么{:10_277:} Mike_python小 发表于 2023-8-16 11:50
我对比了一下题解,跟一个人的思路很想,但是就是找不出为啥RE了@zhangjinxuan @学习编程中的Ben
#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;
} 数组开到
25 * 2501 + 10 re就是数组开小了{:10_256:}
页:
[1]