给定01串 s 和 p, 每次选择两个位置i 和 j, i!=ji != ji!=j
定义x和y
x=aix = a_ix=ai XOR aja_jaj
y=aiy = a_iy=ai OR aja_jaj
令 aia_iai = x , aja_jaj = y
或 aia_iai = y,ai=xa_i = xai=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";
}