http://nvk26.lutsk.ua/cgi-bin/new-client?contest_id=59
school2018-1 … school2018-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;
} |