hiho week 30 register

Ended

Participants:387

Verdict:Accepted
Score:100 / 100
Submitted:2015-01-26 17:36:05

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX