Заняття (14.03.2018) Печать
Добавил(а) Administrator   
23.03.18 10:53

http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=59

school2018-1school2018-30

пароль 1

Задача

http://codeforces.com/problemset/problem/550/A

Два підрядка

Дано рядок s. Потрібно визначити, чи існують в цьому рядку s два  підрядка, якы не пертинаються "AB" і "BA" (ланцюжків можуть йти в будь-якому порядку).

Вхідні дані

На вхід подається рядок s довжиною від 1 до 105 символів, що складається з великих літер латинського алфавіту.

Вихідні дані

Виведіть "YES" (без лапок), якщо рядок s містить дві непересічні підрядка "AB" і "BA", і "NO" інакше

Три варіанти розбирав 

ABA або ВАВ і АВ або ВА

АВіВА

ВАіАВ

#include "iostream"

#include  "string.h"

using namespace std;

int main()

char *s=new char [500000];

cin>>s;

int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;

int i=1;

while (i<strlen(s))

{

if (((s[i-1]=='B' && s[i]=='A' && s[i+1]=='B') || (s[i-1]=='A' && s[i]=='B' && s[i+1]=='A') ) && e==0) {e=1;i=i+3;}

if (((s[i-1]=='A' && s[i]=='B') || (s[i-1]=='B' && s[i]=='A'))  && e==1  )f=1;

if (s[i-1]=='A' && s[i]=='B' && a==0) {a=1;}

if (s[i-1]=='B' && s[i]=='A' && a==1)b=1;

if (s[i-1]=='B' && s[i]=='A' && c==0) {c=1;}

if (s[i-1]=='A' && s[i]=='B' && c==1  )d=1;

i++;

if (a==1 && b==1) {cout<<"YES"<<endl;return 0;} else

if (c==1 && d==1) {cout<<"YES"<<endl;return 0;} else

if (f==1 && e==1) {cout<<"YES"<<endl;return 0;}

}

cout<<"NO"<<endl;

///

return 0;

}