为什么我在此代码中遇到SIGABRT错误[关闭]

问题描述 投票:-1回答:1

我已经在CodeChef中编写了此代码,但它不断给我带来称为(SIGABRT)的运行时错误。我一直在尝试解决此问题,但没有结果。我最大程度地减少了记忆。我需要帮助。

[有N个学生排成一排,从左到右从1到N编号。系统会为您提供一个长度为N的字符串S,其中对于每个有效i,如果第i个学生是女孩,则S的第i个字符为'x',如果该学生是男孩,则为'y'。排成排的同学是朋友。

学生被要求成对参加舞蹈比赛。每对必须由一个男孩和一个女孩组成。如果两个学生是朋友,则只能成对。每个学生最多只能是一对的一部分。可以形成的最大对数是多少?

示例输入3yyyy

示例输出1个20

说明示例情况1:只有一对可能的对:(第一名学生,第二名学生)。

示例案例2:形成两对的方法之一是:(第一名学生,第二名学生)和(第四名学生,第五名学生)。

形成两对的另一种方法是:(第二学生,第三学生)和(第四学生,第五学生)。>>

#include <iostream>
#include <string>
#define rp(l,p) for(int l = 0; l < p; l+=2)
#define s string 
#define ll long long
using namespace std;

int main() {
    std::ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    // your code goes here
    int t = 0;
    cin >> t;
    while(t--){
        s n = "";
        ll max = 0;
        cin >> n;
        if(n.size()%2 == 0){
            rp(l, n.size()-1){
                if(n.substr(0+l, 2) == "xy" || n.substr(0+l, 2) == "yx"){
                    max+=1;
                }
            }
        }
        else if(n.size()%2 == 1){
            s x = n.substr(n.size()-1, 1);
            n.resize(n.size()-1);
            for(int m = 0; m <= (n.size()-1); m+=2){
                if(n.substr(0+m, 2) == "xy" || n.substr(0+m, 2) == "yx"){
                    max+=1;
                }
            }
            n.append(x);
            if(n.substr(n.size()-3,2) == "xy" || n.substr(n.size()-3,2) == "yx"){

            }
            else if(n.substr(n.size()-2,2) == "xy" || n.substr(n.size()-2,2)=="yx"){
                max+=1;
            }
        }
        cout << max << endl;
    }
    return 0;
}
    

我已经在CodeChef中编写了此代码,但它不断给我带来称为(SIGABRT)的运行时错误。我一直在尝试解决此问题,但没有结果。我最大程度地减少了记忆。我...

c++ algorithm c++11 sigabrt competitive-coding
1个回答
0
投票

我完全同意@Sam Varshavchik

© www.soinside.com 2019 - 2024. All rights reserved.