Cod sursa(job #1493266)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 28 septembrie 2015 22:12:59
Problema Rays Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct pct{
    int x;
    int y;
    int z;
}v[200100],x[200100],y[200100];
int n,n1,n2,i,j,nr;
FILE *f,*g;
void chg(int &a,int &b){
    int aux=a;
    a=b;
    b=aux;
}
int cmp(pct a,pct b){
    return a.z*b.x<a.x*b.z;
}
void sol(int n,pct v[]){
    int 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,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%d%d%d",&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,"%d",nr);


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