Cod sursa(job #1988336)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 2 iunie 2017 18:54:37
Problema Gropi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.56 kb
#include <iostream>
#include <cstdlib>
#include <fstream>
#define MAXC  1000000
#define MAX(a, b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) < (b) ? (a) : (b))

using namespace std;

ifstream in ("gropi.in");
ofstream out("gropi.out");

int N,M,C;
long long v1[MAXC],v2[MAXC];//C - coloane , N - nr gropi , M - nr cerinte
int i,linie,col,linie1,col1,dif;

void cit(){
    in>>C>>N;
    for( i = 0 ; i < N; i ++){
        in>>linie>>col;
        if(linie == 1){
            v1[col] = 1;
        }else if(linie == 2){
            v2[col] = 1;
        }
    }
    in >>M;
}
bool groapa(long long int v[],int y, int y1){
    int lo = MIN(y,y1),hi = MAX(y,y1);
    for(lo; lo <= hi ; lo++){
        if(v[lo] && lo != hi){
            return false;
        }
    }
    return true;
}
int lungime1(int x , int y , int x1, int y1){

    if(x == 1){
        dif = abs(y-y1)+1;
        if(groapa(v1,y,y1)){
            return dif;
        }
        return dif + 2;
    }
    if(x == 2){
        dif = abs(y-y1)+1;
        if(groapa(v2,y,y1)){
            return dif;
        }
        return dif + 2;
    }

}
int lungime2(int x, int y, int x1, int y1){


    if(x == 1 && x1 == 2){
        dif = MIN(lungime1(x+1,y,x1,y1),lungime1(x,y,x1-1,y1));
        if(dif < lungime1(x,y,x1-1,y1)){
            dif += 2;
            return dif;
        }
        return ++dif ;
    }else if(x == 2 && x1 == 1){
        dif = MIN(lungime1(x-1,y,x1,y1),lungime1(x,y,x1+1,y1));
        if(dif < lungime1(x,y,x1+1,y1)){
            dif += 2;
            return dif;
        }

        return ++dif;
    }

}
int RandomFloat(int a, int b)
{
    int Number = std::rand() % (b + 1 - a) + a;
    return Number;
}
void evaluator(){
    for(linie = 1 ; linie <= 2; linie++){
        for(col = 1; col <= M ; col ++ ){
            linie1 = RandomFloat(1,2);
            col1 = RandomFloat(1,M);
            out<<linie<<" "<<col<<" "<<linie1<<" "<<col1<<endl;
            if(linie == linie1){
                out<<lungime1(linie,col,linie1,col1)<<"\n";
            }else if(linie != linie1){
                out<<lungime2(2,col,2,col1)<<"\n";
            }

        }
    }

}
void verif(){

    for(i = 0; i < M; i ++){
        in>>linie>>col>>linie1>>col1;
        if(linie == linie1){
            out<<lungime1(linie,col,linie1,col1)<<"\n";
        }else if(linie != linie1){
            out<<lungime2(linie,col,linie1,col1)<<"\n";
        }

    }
}


int main()
{
    cit();
    verif();
    //evaluator();

    return 0;
}