/*
和上题一样只不过,是换成了检验答案,还是找规律,
自己看看吧awa
O(n)
实际上有点卡数据的意思,但是能过,思想也行,除非极限数据不然卡不掉,卡掉了就在卡掉极限数据
*/
#include <iostream>
#include <algorithm>
#include <cstring>
#include <ctime>
using namespace std;
int n, m;
string s;
char get(char a, char b)
{
int sum = 0;
if (a == '0' || b == '0') sum ++ ;
if (sum == 1 && (a == '1' || b == '1')) sum ++ ;
return sum + '0';
}
string make(string s1)
{
string s2;
int len = s1.size() - 1;
// cout << len << endl;
for (int i = 0; i < len; i ++ )
{
s2 += get(s1[i], s1[i + 1]);
}
return s2;
}
int main()
{
int T;
cin >> T;
while (T -- )
{
cin >> n;
s.clear();
for (int i = 0; i < n; i ++ )
{
int c;
scanf("%d", &c);
if (c > 2) c = 2;
s += (char)(c + '0');
}
if (n == 1)
{
cout << "No" << endl;
continue;
}
int cnt = 10;
while (n > 1 && cnt -- ) s = make(s), n -- ; // 用于搞定特殊情况如2222222
if (n & 1)
{
n /= 2;
s = s.substr(n, 1);
}
else
{
n /= 2;
n -- ;
s = s.substr(n, 2);
s = make(s);
}
if (s.size() == 1 && s.compare("2") == 0) cout << "Yes";
else cout << "No";
puts("");
}
cout << clock();
}
// O(n^2)虽然是O(n^2)但是保对
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int n, m;
string s;
char get(char a, char b)
{
int sum = 0;
if (a == '0' || b == '0') sum ++ ;
if (sum == 1 && (a == '1' || b == '1')) sum ++ ;
return sum + '0';
}
string make(string s1)
{
string s2;
int len = s1.size() - 1;
for (int i = 0; i < len; i ++ )
{
s2 += get(s1[i], s1[i + 1]);
}
return s2;
}
int main()
{
int T;
cin >> T;
while (T -- )
{
cin >> n;
s.clear();
for (int i = 0; i < n; i ++ )
{
char c;
cin >> c;
s += c;
// cout << c;
}
// cout << s << endl;
while ( -- n) s = make(s);
if (s[0] == '2') cout << "Yes";
else cout << "No";
puts("");
}
}