infoarena

infoarena - concursuri, probleme, evaluator, articole => TJU => Subiect creat de: Pripoae Teodor Anton din Iunie 08, 2008, 18:57:20



Titlul: 2041. Ratio
Scris de: Pripoae Teodor Anton din Iunie 08, 2008, 18:57:20
nu stiu de ce iau restricted function  ](*,) :fighting:

http://acm.tju.edu.cn/toj/vcontest/showp1364_H.html (http://acm.tju.edu.cn/toj/vcontest/showp1364_H.html)

Cod:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int x,y;
double minim(double a, double b){
       if (a>b)
          return b;
       return a;
}
double modul(double a){
    if (a<0)
       return a*(-1.00);
    return a;
}
double prec(double f,int y){
      double a;
      int jos,sus;
      a=f*y;
      jos=floor(a);
      sus=ceil(a);
      return (double) minim( modul( f -  ( (double) sus ) / y ),
                           modul( f -  ( (double) jos ) / y ));
}
void scrie(double f,int x){
     double c=f*x;
     int a,b;
     a=floor(c);
     b=ceil(c);
     if (b-c > c-a)
        printf("%d/%d\n",a,x);
     else
         printf("%d/%d\n",b,x);
}
void solve(){
     double f,xx,prev;
     int i;
     xx=(double)x;
     f=(double)(xx/y);
     prev=prec(f,1);
     scrie(f,1);
     for (i=2;i<=y;++i){
         xx=prec(f,i);
         if (xx<prev){
            scrie(f,i);
            prev=xx;
         }
         if (i*f==ceil(i*f))
            return;
     }
}
int main(void){
    FILE *f;
    f=fopen("ratio.inp","r");
    while (fscanf(f,"%d%d",&x,&y)!=EOF){
          solve();
          printf("\n");
    }
    return 0;
}


Titlul: Răspuns: 2041. Ratio
Scris de: Paul-Dan Baltescu din Iunie 08, 2008, 19:28:42
Pentru ca deschizi un fisier. :)


Titlul: Răspuns: 2041. Ratio
Scris de: Andrei Grigorean din Iunie 08, 2008, 19:42:07
Incearca sa comentezi portiuni de program, poate gasesti functia care ii deranjeaza. Compilatorul de pe tju am impresia ca nu e standard :).


Titlul: Răspuns: 2041. Ratio
Scris de: Pripoae Teodor Anton din Iunie 08, 2008, 20:08:52
pai trebuia sa deschid fisierul, de acolo citeam datele de intrare


Titlul: Răspuns: 2041. Ratio
Scris de: Paul-Dan Baltescu din Iunie 08, 2008, 23:24:37
Incearca cu freeopen atunci.


Titlul: Răspuns: 2041. Ratio
Scris de: Pripoae Teodor Anton din Iunie 09, 2008, 09:17:11
am  incercat si cu freopen si cu streamuri dar nu merge, da la fel, iar cand am scos fisierul de intrare iau presentation error


Titlul: Răspuns: 2041. Ratio
Scris de: Stefan Istrate din Iunie 09, 2008, 14:38:30
Recunosc ca enuntul e cam ambiguu cu fisierul ala "ratio.inp", dar se pare ca trebuie sa citesti din stdin. Presentation error primesti pentru ca tu scrii inca o linie goala si dupa ultimul set de date. Am modificat citirea in felul urmator si a luat AC:
Cod:
int t = scanf("%d%d", &x, &y);
while(t == 2) {
    solve();
    t = scanf("%d%d", &x, &y);
    if(t == 2)
        printf("\n");
}