Cod sursa(job #1493271)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 28 septembrie 2015 22:17:06
Problema Rays Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct pct{
    long long x;
    long long y;
    long long z;
}v[200100],x[200100],y[200100];
long long n,n1,n2,i,j,nr;
FILE *f,*g;
void chg(long long &a,long long &b){
    long long aux=a;
    a=b;
    b=aux;
}
long long cmp(pct a,pct b){
    return a.z*b.x<a.x*b.z;
}
void sol(long long n,pct v[]){
    long long i,j,a,b;
    if(!n)
        return;
    sort(v+1,v+n+1,cmp);
    a=v[1].x;
    b=v[1].z;
    nr++;
    for(i=1;i<=n;i++){
        if( v[i].x*b < v[i].y*a ){
            nr++;
            a=v[i].x;
            b=v[i].z;
        }
    }
}
int main(){
    f=fopen("rays.in","r");
    g=fopen("rays.out","w");
    fscanf(f,"%lld",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%lld%lld%lld",&v[i].x,&v[i].y,&v[i].z);
        if(v[i].y>v[i].z)
            chg(v[i].y,v[i].z);
        if(v[i].x<0){
            v[i].x=-v[i].x;
            x[++n1]=v[i];
        }
        else
            y[++n2]=v[i];
    }
    sol(n1,x);
    sol(n2,y);
    fprintf(g,"%lld",nr);


    fclose(f);
    fclose(g);
    return 0;
}