我已经在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)的运行时错误。我一直在尝试解决此问题,但没有结果。我最大程度地减少了记忆。我...
我完全同意@Sam Varshavchik