Превышен предел времени на тесте 10. Не понимаю, что я делаю не так. Неужели есть более простое и быстрое решение? HELP! HELP! HELP! Подкиньте идею)
#include <iostream>
#include <string>
long Seq(string s)
{
long seq=0;
long i=0;
i=s.find("()");
while (i<s.length()-1)
{
for (long j=i;j<s.length()-2;j++)
{
s[j]=s[j+2];
}
s.resize(s.length()-2);
seq+=2;
i=s.find("()");
}
if (s.length()>0)
{
seq=0;
}
return seq;
}
void main()
{
string cmd;
cin>>cmd;
long maxl = 0, num = 0;
for (long i = 0; i < cmd.length(); i++)
for (long j = cmd.length() - 1; j >= i; j--)
{
if ((j - i + 1) % 2 == 0 && (j - i + 1) >= maxl)
{
long ibuf = Seq(cmd.substr(i, j - i + 1));
if (maxl == ibuf) num++;
else if (maxl < ibuf) { maxl = ibuf; num = 1; }
}
}
if (maxl == 0) num = 1;
cout<<maxl<<" "<<num<<endl;
}
Здесь метод Seq возвращает длину правильной последовательности s,
maxl хранит максимальную длину правильной последовательности,
num - количество последовательностей длины maxl
Anybody from 2019?