Cod sursa(job #2139342)

Utilizator sergiudnyTritean Sergiu sergiudny Data 22 februarie 2018 13:59:29
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <bits/stdc++.h>
#define DM 4
using namespace std;
ifstream fin("xsizero.in");
ofstream fout("xsizero.out");

/// -1 invalid
/// 0 draw
/// 1 win X
/// 2 lose X

/// 1 X
/// 2 0

int n=3,nrx,nr0,cont;
int c[4][3],l[4][3],d[3][3];
string v[4];

int toIndex(char a){
   return (a=='X'?1:2);
}

void arrange(){
    for(int i=0;i<n;++i) for(int j=0;j<n;++j){
        if(v[i][j]=='X' || v[i][j]=='0'){
            int k=0;
            for(;k<n && !c[j][k];++k); c[j][k]=toIndex(v[i][j]),k=0;
            for(;k<n && !l[i][k];++k); l[i][k]=toIndex(v[i][j]),k=0;
            if(i==j){
                for(;k<n && !d[0][k];++k);
                d[0][k]=toIndex(v[i][j]),k=0;
            } else if(i==n-j+1){
                for(;k<n; && !d[1][k];++k);
                d[1][k]=toIndex(v[i][j]),k=0;
            }
        }
    }
}

void afis(int ans){
    fout<<"Testul #"<<cont<<": ";
    if(ans==-1) fout<<"invalid";
    if(!ans) fout<<"draw";
    if(ans==1) fout<<"win";
    if(ans==2) fout<<"lose";
    fout<<'\n';
}

bool isValid(){
    int nrX=0,nr0=0;
    for(auto i:v) for(auto j:v){
        if(j=='0') nr0++;
        else if(i=='X') nrX++;
    }
    if(abs(nrX-nr0)>1) return 0;
    return 1;
}

int main()
{
    while(fin>>v[0]>>v[1]>>v[2]){
        cont++;
        if(!isValid()) afis(-1);
        arrange();
    }
    return 0;
}