2018 샹 탄 초청 경기 G

제목: a, b, c 만 포함 하 는 문자열 두 개 를 입력 하여 첫 번 째 문자열 을 삽입 하거나 aa, bb, abab 를 삭제 한 후에 두 번 째 문자열 이 될 수 있 는 지 판단 합 니 다.
가능 하 다 면 yes 를 출력 합 니 다. 그렇지 않 으 면 no 를 출력 합 니 다.
ab
          ba
출력 yes  왜냐하면 ab - aababb - ba
          ac
          ca
출력 no
분석: 삽입 과 삭제 대상 은 aa bb abab 일 수 있 기 때문에 c 의 수량 이 다 르 면 변환 할 수 없습니다.
먼저 문자열 을 간소화 할 수 있 습 니 다. 즉, 모든 aa bb 를 제거 하 는 것 입 니 다.
그리고 마지막 남 은 것 은 abababab...........................................................................
나머지 문자 수 는 0, 1, 2, 3 일 수 있 습 니 다. 나머지 숫자 중 하나 가 짝수 라면 나머지 두 글자 의 숫자 가 같 아야 합 니 다. 마지막 에 남 은 것 은 ab 또는 ba 또는 비어 있 을 수 있 고 ab 와 ba 는 서로 전환 할 수 있 기 때 문 입 니 다.
나머지 가 홀수 이 고 문자 수가 같다 면 첫 번 째 문자 만 같 으 면 됩 니 다. 마지막 에는 a 나 b 또는 aba 또는 bab 만 나타 날 수 있 기 때 문 입 니 다.
나머지 가 홀수 이 고 문자 수가 다 르 면 첫 번 째 문자 만 다 르 면 됩 니 다. ab 와 ba 는 서로 전환 할 수 있 기 때 문 입 니 다. (선택 후 두 개) 그 다음 에 aa 나 bb 를 없 애고 나머지 문자열 을 서로 전환 시 킬 수 있 습 니 다. (마지막 으로 남 은 것 은 a, b, aba, bab 입 니 다. 그러면 bab - bba - a)
#include 
#include 
#include 
#include 
using namespace std;
#define LL long long
#define N 10005
char S[N],T[N];
string simplify(string s)   //      ababab……   bababa……  
{
	string ans = "";   
	while(1) {
		bool flag = 1;
		int len = s.length();
		for(int i=0;i

좋은 웹페이지 즐겨찾기