Fun Game§
可以发现,对于序列
s上的某个位置,如果需要对其进行更改只能通过其前方(包括自身)的元素对该元素进行影响。对于一种特殊情况,
s的首位为1,我们必定可以通过异或首位来构造出t(最后首位可以通过异或自身来更改成0)。因此发现,
s中的1很重要,越靠前越好。接下来讨论
s最先出现为0的情况,假如说对应位置的t也为0,这个位置显然可以忽视掉。若为
1,很显然无药可救,此时s的前缀并不能为该位置提供1。综上看来,
00最先出现对答案无影响 ,11和10最先出现代表必定能构造出t,01最先出现则代表构造不出t。#include <bits/stdc++.h> void solve() { int n; std::cin >> n; std::string s, t; std::cin >> s >> t; bool ok = true; for (int i = 0; i < n; i++) { if (s[i] == '1') { break; } if (t[i] == '1') { ok = false; break; } } if (ok) { std::cout << "YES\n"; } else { std::cout << "NO\n"; } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int t; std::cin >> t; while (t--) { solve(); } return 0; }