Cod sursa(job #1094171)

Utilizator rughibemBelcineanu Alexandru Ioan rughibem Data 28 ianuarie 2014 23:15:25
Problema Regiuni Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<stdio.h>
#define DIM 1005
FILE *f=fopen("regiuni.in","r"), *g=fopen("regiuni.out","w");

long int n, m, a[DIM], b[DIM], c[DIM], x[DIM], y[DIM], v[DIM], stare[DIM], secund[DIM], k;

    // stare [ i ] = 0, grupa neimpartita
    //             = 1, grupa impartita cu >0
    //             = 2, grupa impartita cu <0

    // secund [ i ] = grupa i unde are impartirea secunda

void citire(){
long int i;

    fscanf(f,"%ld %ld\n",&n,&m);
    for(i=1;i<=n;i++)
        fscanf(f,"%ld %ld %ld\n",&a[i],&b[i],&c[i]);
    for(i=1;i<=m;i++)
        fscanf(f,"%ld %ld\n",&x[i],&y[i]);

}

void initializare(){long int i;for(i=1;i<=m;i++){stare[i]=0;secund[i]=0;}}

void rezolvare(){
long int i, j;

    k=1; for(i=1;i<=m;i++)v[i]=k;

    for(i=1;i<=n;i++){

        for(j=1;j<=m;j++){

            if( a[i] * x[j] + b[i] * y[j] + c[i] > 0 ){

                if     ( stare[ v[j] ]==0 ){ stare[ v[j] ]=1; }
                else if( stare[ v[j] ]==2 ){

                    if( secund[ v[j] ] == 0 ){ k++; secund[ v[j] ]= k; }
                    v[j]= secund[ v[j] ];

                }

            }
            else{

                if     ( stare[ v[j] ]==0 ){ stare[ v[j] ]=2; }
                else if( stare[ v[j] ]==1 ){

                    if( secund[ v[j] ] == 0 ){ k++; secund[ v[j] ]= k; }
                    v[j]= secund[ v[j] ];

                }

            }

        }
        initializare();
    }

    fprintf(g,"%ld\n",k);
    //for(i=1;i<=m;i++){fprintf(g,"%ld ",v[i]);}

}

int main(){

    citire();
    rezolvare();

return 0;
}