Cod sursa(job #923797)

Utilizator ELHoriaHoria Cretescu ELHoria Data 23 martie 2013 20:50:01
Problema Nivele Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
 
using namespace std;
 
ifstream cin("nivele.in");
ofstream cout("nivele.out");


const char *mm[2] = {"NU","DA"};
const int nmax = int(5e4 ) + 2;
int T, N;
int A[nmax];

bool checkOdd() {
	if(A[1] == A[2]) {
		bool seen = false;
		for(int i = 3;i < N;) {
			if(!seen && A[i] != A[i + 1]) {
				i++;
				seen = true;
			} else 
			if(A[i] == A[i + 1]) {
				i += 2;
			} else {
				return false;
			}
		}
		if(!seen) 
			seen |= A[N] == A[N - 1];
		if(seen) {
			return true;
		}
		return false;
		
	} else {
		for(int i = N;i > 1;i -= 2) {
			if(A[i] != A[i - 1]) {
				return false;
			}
		}
	}
	return true;
}

bool checkEven() {
	for(int i = 1;i <= N;i += 2) {
		if(A[i] != A[i + 1]) {
			return false;
		}
	}
	return true;
}

int main()
{
	int T;
	for(cin>>T;T;T--) {
		cin>>N;
		for(int i = 1;i <= N;i++) {
			cin>>A[i];
		}
		if(N & 1) {
			cout<<mm[checkOdd()]<<"\n";
		} else {
			cout<<mm[checkEven()]<<"\n";
		}
	}

    return 0;
}