// Optimální řešení třetí z metod popsaných ve vzorovém řešení #include #include #include #include using namespace std; void fix(int z, vector &A, const string &nS) { // Co nejvíce snížíme hodnotu na indexu z. A[z] = 0; if (z>0 && nS[z-1]=='<') A[z] = max( A[z], A[z-1]+1 ); if (z') A[z] = max( A[z], A[z+1]+1 ); } int main() { int N, M; cin >> N >> M; string S; cin >> S; // Odstraníme znaky '=' a místo nich si o každé hodnotě zapamatujeme, // kolikrát ji chceme vypsat. // Zároveň s tím sestrojíme nějakou korektní posloupnost. vector A(1,N); vector pocet(1,1); string nS; for (char c:S) { if (c=='<') { A.push_back( A.back()+1 ); pocet.push_back(1); nS += c; } if (c=='=') ++pocet.back(); if (c=='>') { A.push_back( A.back()-1 ); pocet.push_back(1); nS += c; } } // Projdeme posloupnost zleva doprava a následně zprava doleva. int Z = A.size(); for (int z=0; z=0; --z) fix(z,A,nS); // Zjistíme, zda se posloupnost vejde do zadaného rozsahu a podle toho // buď vypíšeme posloupnost, nebo chybovou zprávu. bool fits = true; for (int i=0; iM) fits = false; if (fits) { for (int i=0; i