Xorand's blog

By Xorand, 14 years ago, In Russian

Превышен предел времени на тесте 10. Не понимаю, что я делаю не так. Неужели есть более простое и быстрое решение? HELP! HELP! HELP! Подкиньте идею)


#include <iostream>
#include <string>

using namespace std;

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

  • Vote: I like it
  • 0
  • Vote: I do not like it

»
6 years ago, # |
  Vote: I like it +9 Vote: I do not like it

Anybody from 2019?