Cod sursa(job #1652719)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 15 martie 2016 12:27:05
Problema Robotei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 6.85 kb
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
struct pct{
    double x1;
    double y1;
    double x2;
    double y2;
    double x3;
    double y3;
}v[110];
struct pctt{
    double x;
    double y;
}p1,p2,p3;
int p,n,k,i,j,np,nr,viz[110];
double a,dist,x[110][110];
FILE *f,*g;
double minim(double a,double b){
    if(a<b)
        return a;
    return b;
}
double modul(double a){
    if(a<0)
        return -a;
    return a;
}
double distt(pctt a,pctt b,pctt c ){
    double c1 = modul( b.x - c.x );
    double c2 = modul( b.y - c.y );
    double r1 = modul( b.x - a.x ) / c1;
    double h = c2 * r1;
    return h + minim( modul( a.y - b.y ), modul( a.y - c.y ) );
}
void dfs(int nod){
    viz[nod] = 1;
    np++;
    for(int i=1;i<=n;i++){
        if( i != nod && x[i][nod] <= k && viz[i] == 0 ){
            dfs(i);
        }
    }
}
int main(){
    f=fopen("elicoptere.in","r");
    g=fopen("elicoptere.out","w");
    fscanf(f,"%d%d%d",&p,&n,&k);
    for(i=1;i<=n;i++){
        fscanf(f,"%lf%lf%lf%lf%lf%lf",&v[i].x1,&v[i].y1,&v[i].x2,&v[i].y2,&v[i].x3,&v[i].y3);
    }
    for(i=1;i<=n;i++){
        for(j=i+1;j<=n;j++){
            a=200000000;
            if( v[i].x1 == v[j].x1 )
                a = minim( a, modul( v[i].y1 - v[j].y1 ) );
            if( v[i].x1 == v[j].x2 )
                a = minim( a, modul( v[i].y1 - v[j].y2 ) );
            if( v[i].x1 == v[j].x3 )
                a = minim(a, modul( v[i].y1 - v[j].y3 ) );
            if( v[i].x2 == v[j].x1 )
                a = minim(a, modul( v[i].y2 - v[j].y1 ) );
            if( v[i].x2 == v[j].x2 )
                a = minim(a, modul( v[i].y2 - v[j].y2 ) );
            if( v[i].x2 == v[j].x3 )
                a = minim(a, modul( v[i].y2 - v[j].y3 ) );
            if( v[i].x3 == v[j].x1 )
                a = minim(a, modul( v[i].y3 - v[j].y1 ) );
            if( v[i].x3 == v[j].x2 )
                a = minim(a, modul( v[i].y3 - v[j].y2 ) );
            if( v[i].x3 == v[j].x3 )
                a = minim(a, modul( v[i].y3 - v[j].y3 ) );
            if( v[i].y1 == v[j].y1 )
                a = minim(a, modul( v[i].x1 - v[j].x1 ) );
            if( v[i].y1 == v[j].y2 )
                a = minim(a, modul( v[i].x1 - v[j].x2 ) );
            if( v[i].y1 == v[j].y3 )
                a = minim(a, modul( v[i].x1 - v[j].x3 ) );
            if( v[i].y2 == v[j].y1 )
                a = minim(a, modul( v[i].x2 - v[j].x1 ) );
            if( v[i].y2 == v[j].y2 )
                a = minim(a, modul( v[i].x2 - v[j].x2 ) );
            if( v[i].y2 == v[j].y3 )
                a = minim(a, modul( v[i].x2 - v[j].x3 ) );
            if( v[i].y3 == v[j].y1 )
                a = minim(a, modul( v[i].x3 - v[j].x1 ) );
            if( v[i].y3 == v[j].y2 )
                a = minim(a, modul( v[i].x3 - v[j].x2 ) );
            if( v[i].y3 == v[j].y3 )
                a = minim(a, modul( v[i].x3 - v[j].x3 ) );
            if( ( v[i].x1 < v[j].x1 && v[i].x1 > v[j].x2 ) || ( v[i].x1 > v[j].x1 && v[i].x1 < v[j].x2 ) ){
                p1.x=v[i].x1;
                p1.y=v[i].y1;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x2;
                p3.y=v[j].y2;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x1 < v[j].x2 && v[i].x1 > v[j].x3 ) || ( v[i].x1 > v[j].x2 && v[i].x1 < v[j].x3 ) ){
                p1.x=v[i].x1;
                p1.y=v[i].y1;
                p2.x=v[j].x2;
                p2.y=v[j].y2;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x1 < v[j].x1 && v[i].x1 > v[j].x3 ) || ( v[i].x1 > v[j].x1 && v[i].x1 < v[j].x3 ) ){
                p1.x=v[i].x1;
                p1.y=v[i].y1;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x2 < v[j].x1 && v[i].x2 > v[j].x2 ) || ( v[i].x2 > v[j].x1 && v[i].x2 < v[j].x2 ) ){
                p1.x=v[i].x2;
                p1.y=v[i].y2;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x2;
                p3.y=v[j].y2;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x2 < v[j].x2 && v[i].x2 > v[j].x3 ) || ( v[i].x2 > v[j].x2 && v[i].x2 < v[j].x3 ) ){
                p1.x=v[i].x2;
                p1.y=v[i].y2;
                p2.x=v[j].x2;
                p2.y=v[j].y2;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x2 < v[j].x1 && v[i].x2 > v[j].x3 ) || ( v[i].x2 > v[j].x1 && v[i].x2 < v[j].x3 ) ){
                p1.x=v[i].x2;
                p1.y=v[i].y2;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x3 < v[j].x1 && v[i].x3 > v[j].x2 ) || ( v[i].x3 > v[j].x1 && v[i].x3 < v[j].x2 ) ){
                p1.x=v[i].x3;
                p1.y=v[i].y3;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x2;
                p3.y=v[j].y2;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x3 < v[j].x1 && v[i].x3 > v[j].x3 ) || ( v[i].x3 > v[j].x1 && v[i].x3 < v[j].x3 ) ){
                p1.x=v[i].x3;
                p1.y=v[i].y3;
                p2.x=v[j].x1;
                p2.y=v[j].y1;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            if( ( v[i].x3 < v[j].x2 && v[i].x3 > v[j].x3 ) || ( v[i].x3 > v[j].x2 && v[i].x3 < v[j].x3 ) ){
                p1.x=v[i].x3;
                p1.y=v[i].y3;
                p2.x=v[j].x2;
                p2.y=v[j].y2;
                p3.x=v[j].x3;
                p3.y=v[j].y3;
                a=minim(a, distt(p1,p2,p3) );
            }
            x[i][j] = x[j][i] = a;
        }
    }
    if( p == 1 ){
        for(i=1;i<=n;i++){
            for(j=i+1;j<=n;j++){
                if( x[i][j] < k )
                    nr++;
            }
        }
        fprintf(g,"%d",nr);
        return 0;
    }
    if( p == 2 ){
        for(i=1;i<=n;i++){
            if(!viz[i]){
                np=0;
                dfs(i);
                nr += np*(np-1)/2;
            }
        }
        fprintf(g,"%d",nr);
        return 0;
    }
    if( p == 3 ){
        for(i=1;i<=n;i++){
            for(j=i+1;j<=n;j++){
                if( x[i][j] < k )
                    dist += x[i][j];
            }
        }
        fprintf(g,"%.3lf",dist);
        return 0;
    }
    fclose(f);
    fclose(g);
    return 0;
}