给定01串 s 和 p, 每次选择两个位置i 和 j, i ! = j i != j i!=j
定义x和y
x = a i x = a_i x=ai XOR a j a_j aj
y = a i y = a_i y=ai OR a j a_j aj
令 a i a_i ai = x , a j a_j aj = y
或 a i a_i ai = y, a i = x a_i = x ai=x
问s 能不能变到 p
注意:s和p的长度不一样
发现1:如果数组中一个1,则可以变成若干个1,或者全1
例如:001 可以变为:010、 100、 110、 111、 101等,但不能变成 000
以下三种情况判负,其他情况判为正
(1)长度不一样
(2)
- s = “00…0000” (全零)
- p = “000…001”(含有若干个1)
(3)
- s = “000…100” (若干个1)
- p = “000…000” (全是0)
void solve()
{
string s, p;
cin >> s >> p;
if(s.size() != p.size()) {
cout << "NO\n";
return ;
}
int len = (int)s.size();
bool s0 = false, s1 = false;
bool p0 = false, p1 = false;
rep(i,0,len-1) {
if(s[i]=='0') s0 = true;
else if(s[i]=='1') s1 = true;
if(p[i]=='0') p0 = true;
else if(p[i]=='1') p1 = true;
}
if(s1 == false && p1 == true) cout << "NO\n";
else if(s1 == true && p1 == false) cout << "NO\n";
else cout << "YES\n";
}