使用 c++ 查找 lapindromes 时运行时错误"SIGCONT"

Runtime error "SIGCONT" while finding lapindromes using c++

本文关键字:运行时错误 SIGCONT lapindromes c++ 查找 使用      更新时间:2023-10-16

我试图解决codechef上的lapindrome问题。

在我的本地 ide 上,程序按预期运行。

但是在代码厨师提交中,它给出了运行时错误"SIGCONT"。

#include<iostream>
#pragma GCC optimize("Ofast")
using namespace std;
int main() {
int t;
cin>>t;
do
{
string l;
cin>>l;
int c = 0;
for (int i = 0; i < (l.length()/2); i++)
{
if (l[i] == l[i+(l.length()/2)])
{
c++;
}
}
if (c == l.length()/2) {
printf("YESn");
}
else
{
printf("NOn");
}
t--;
} while (t!=0);
return 0;
}

首先,我想指出您的代码是错误的,因为对于测试用例转子,您的代码给出NO作为答案,它应该是YES。

为什么得到错误的答案?

有问题的是,如果字符串中有奇数个字符,我们忽略中间字符并检查 lapindrome。

因此,您需要修改/删除以下代码。

if (c == l.length()/2) {
printf("YESn");
}
else
{
printf("NOn");
}

而是这样做:

if (c == l.length()/2) {
//check for lapindrome
}
else
{
//remove middle character
//check for lapindrome
}

为什么"SIGCONT"错误?

当您超出 IDE 的打印限制时,会发生此错误。对于 Codechef IDE,它大约有 2^16 个字符。

您可以尝试在本地直接在文件中打印输出。(感谢black_truce(。

我的代码:

您可以查看以下解决方案以供参考。

#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
string str,str1,str2;
cin>>str;
int len=str.length();
if(len%2==0){
str1=str.substr(0, len/2);
str2=str.substr(len/2, len);
}
else{
str1=str.substr(0, len/2);
str2=str.substr(len/2+1, len);
}
sort(str1.begin(), str1.end());
sort(str2.begin(), str2.end());
if(str1==str2) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}