Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<cstdio>#include<cstring>const int maxn = 100000 + 100;int num[maxn], cnt[maxn];int vis[maxn], n;int tot;int Y[maxn], N[maxn], cnt1, cnt2;void dfs(int x) {if(x == n) {if(vis[x-1] + vis[x] != num[x]) return;for(int i = 1; i <= n; i++) if(vis[i]) cnt[i]++;tot++;return;}int sum = vis[x-1] + vis[x] + vis[x+1];if(sum == num[x]) dfs(x+1);else if(sum + 1 == num[x]) {vis[x+1] = 1;dfs(x+1);}else return;}int main() {int kase;scanf("%d", &kase);while(kase--) {scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &num[i]);memset(cnt, 0, sizeof(cnt));memset(vis, 0, sizeof(vis));tot = 0;