Cod sursa(job #1992037)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 19 iunie 2017 10:43:37
Problema Bowling Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <bits/stdc++.h>
#define MAXN 50002

bool v[MAXN + 1];

char dp[MAXN + 1][2];
int poz[MAXN + 1];

int main() {
    FILE *fi, *fout;
    int t, i, n;
    fi = fopen("bowling.in" ,"r");
    fout = fopen("bowling.out" ,"w");
    fscanf(fi,"%d " ,&t);
    while(t > 0) {
       t--;
       memset(dp, -1, sizeof(dp));
       fscanf(fi,"%d " ,&n);
       for(i = 1; i <= n; i++)
          fscanf(fi,"%d " ,&v[i]);
       while(n > 0 && v[n] == 0)
          n--;
       if(n == 0)
          fprintf(fout,"Fumeanu\n");
       else {
          int sz = 0;
          for(i = 1; i <= n; i++)
            if(v[i] == 1)
               poz[++sz] = i;
          dp[sz][0] = dp[sz][1] = 1;
          if(poz[sz] == poz[sz - 1] + 1)
            dp[sz - 1][0] = dp[sz - 1][1] = 1;
          else
            dp[sz - 1][0] = dp[sz - 1][1] = 0;
          for(i = sz - 2; i >= 0; i--) {
             if(poz[i] == poz[i + 1]) {
                 dp[i][0] = 1 - dp[i + 2][1];
                 dp[i][1] = 1 - dp[i + 2][0];
             }
             if(dp[i][0] < 1 - dp[i + 1][1])
               dp[i][0] = 1 - dp[i + 1][1];
             if(dp[i][1] < 1 - dp[i + 1][0])
               dp[i][1] = 1 - dp[i + 1][0];
          }
          if(dp[1][0] == 1)
             fprintf(fout,"Nargy\n");
          else
             fprintf(fout,"Fumeanu\n");
       }
    }
    fclose(fi);
    fclose(fout);
    return 0;
}