回旋镖撞到东西就会右转,给了每列的回旋镖撞几次,构造一个地图,行列障碍物小于3,撞击不超过3
每行每列最多放两个物体,a[i]可能有0,1,2,3;
0:该列不能有物体,忽略
1:该列至少有1个,右面不能有东西,后面的3可能在这上面加所以从下往上排
2:该列有一个而且该行之后的列有一个物体让他再次转向,后面列只能有一个物体,因为这个物体下面还有的话会让他转3次,上面有撞到向下会撞4次以上,从左往右每个2找可以的最左的1,匹配2的话会让这行放3个
3:3可以在没有用过的1,2,3的列反弹,从前往后可能会对后面有干扰,从后往前找3,提示找可以的最左可以用的行;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
#define re register
using namespace std;
const int N = 300010;
bool f;
int n, a[N], cnt, ansx[N], ansy[N];
bool vis[N];
int row[N], rowcnt;
signed main() {
cin >> n ;
for