Codeforces 라운드 # 619 (사업부 2.)를했다. 세 개의 문자열

Discription은
다음 세 문자열에 동일한 길이 n의 A, B 및 C가 주어진다. 문자열은 소문자 영문으로 만 구성되어 있습니다. (A)의 i 번째 문자 B의 i 번째 문자가 양방향 인, 인공 지능되고, C의 i 번째 문자 CI이다.

하나가 인공 지능 또는 양방향으로 모든 들어 내가 (1≤i≤n) 당신은 (즉, 교환) CI를 교체해야합니다. 그래서 총에 당신은 그들 각각은 하나 ci↔ai 또는 ci↔bi (내가 1 및 N (포함) 사이의 모든 정수 반복 할), n 개의 스왑 작업을 수행 할 수 있습니다.

A는 "코드"입니다 예를 들어, B는 "참", c는 "도움", 당신은 1 일과에서 4 번째 문자와 B에서 다른 사람을 복용 C는 "크루"와 동일 할 수있다 . 이 방법으로는 "hodp"이되고 B는 "텔레"가된다.

이들 스왑 후 문자열 A가 문자열 B와 정확히 동일하게하는 것이 가능합니까?

입력
입력은 여러 개의 테스트 케이스로 구성되어 있습니다. 테스트 케이스의 수 - 첫 번째 행은 하나의 정수 t (1≤t≤100)을 포함한다. 테스트 케이스의 설명은 다음과 같습니다.

각 테스트 케이스의 첫 번째 줄은 소문자 영어 문자 A의 문자열을 포함합니다.

각 테스트 케이스의 두 번째 줄은 소문자 영어 문자 B의 문자열을 포함합니다.

각 테스트 케이스의 세 번째 줄은 소문자 영문자 C의 문자열을 포함합니다.

각 테스트 케이스에이 세 문자열이 비어있는 100을 초과하지 않는 동일한 길이를 가지고 있음을 보장한다.

출력
모든 테스트 케이스에 대한 답변 인쇄 t 라인. 각 테스트 케이스의 경우 :

그것이 따옴표없이 스트링 B 인쇄 "YES"로 동일한 문자열을 만들 수 있다면, 그렇지 따옴표없이 "NO"를 출력한다.

당신은 대답의 하나 소문자 나 대문자를 인쇄 할 수 있습니다.


입력

4
aaa
bbb
ccc
abc
bca
bca
aabb
bbaa
baba
imi
mii
iim

산출

NO
YES
YES
NO

참고
첫 번째 테스트의 경우, 해당 문자열 A가 정확히 문자열 B와 동일하게되도록 스왑을하는 것은 불가능합니다.

두 번째 테스트의 경우에, 당신은 가능한 모든 난에 대한 인공 지능과 CI를 교체해야합니다. A는 "BCA"가되는 스왑 후, B는 "BCA」이 C는"ABC "가된다. 여기서 문자열 A와 B는 동일하다.

세 번째 실험의 경우에는 A4와 B3 및 C4와 A1과 C1, B2와 C2, C3를 교환한다. 다음 문자열 A가 "바바"가 문자열 B "는 바바"가 문자열 (C)는 「ABAB "된다. 여기서 문자열 A와 B는 동일하다.

네 번째 실험의 경우에는, 해당 문자열 A가 정확히 스트링 B와 동일하게되도록 교환을 수행하는 것이 불가능하다.

문제의 의미는
세 개의 동일한 길이 (a)는 동작의 수행에 필요한 B, C, N 배 주어진 문자열 : 인공 지능 또는 BI 및 CI 교환을 수행해야한다.
동작을 n 회 B 후 Q. 문자열 문자열의 이용과 동일하다.

아이디어는
비트 i에서 분석, BI, CI 등을하지 않습니다 인공 지능 경우, 인공 지능 양방향 동일하지만, CI 및 인공 지능 및 BI가 동일하지 않을 경우 직접 확인, 사실이 아니다 확립되지 않습니다.

AC 코드

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define sd(n) scanf("%d", &n)
#define sdd(n, m) scanf("%d%d", &n, &m)
#define sddd(n, m, k) scanf("%d%d%d", &n, &m, &k)
#define sld(n) scanf("%lld", &n)
#define sldd(n, m) scanf("%lld%lld", &n, &m)
#define slddd(n, m, k) scanf("%lld%lld%lld", &n, &m, &k)
#define sf(n) scanf("%lf", &n)
#define sff(n, m) scanf("%lf%lf", &n, &m)
#define sfff(n, m, k) scanf("%lf%lf%lf", &n, &m, &k)
#define pd(n) printf("%d\n", (n))
#define pdd(n, m) printf("%d %d\n", n, m)
#define pld(n) printf("%lld\n", n)
#define pldd(n, m) printf("%lld %lld\n", n, m)
#define rep(i, a, n) for(int i=a; i<=n; i++)
#define per(i, n, a) for(int i=n; i>=a; i--)
 
int T;
string a,b,c;
int f;
 
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        cin>>a>>b>>c;
        f=0;
        for(int i=0;i<a.size();i++)
        {
            if(a[i]!=b[i]&&a[i]!=c[i]&&b[i]!=c[i])
            {
                f=1;
                break;
            }
            else if(a[i]==b[i]&&c[i]!=a[i]&&c[i]!=b[i])
            {
                f=1;
                break;
            }
        }
        if(f==1)
            cout<<"NO"<<endl;
        else
            cout<<"YES"<<endl;
    }
    return 0;
}
게시 된 313 개 원래 기사 · 원 찬양 (105) ·은 10000 +를 볼

추천

출처blog.csdn.net/weixin_43460224/article/details/104311886