Autor Tema: problema oie rastreador  (Leído 1477 veces)

Desconectado llos

  • Novato
  • *
  • Mensajes: 5
    • Ver Perfil
problema oie rastreador
« en: Diciembre 27, 2009, 08:08:23 pm »
Hola, no entiendo que fallo tengo en este problema no es complicado pero no se...


os dejo el post i opinais:


Código: [Seleccionar]
#include <iostream>
#include <vector>
using namespace std;

double angulo (string s) {
    int n = s.size();
    bool sortir = false;
    int pos;
    for (int i = n - 1; i >= 0 and not sortir; --i) {
        if (s[i] == '1') sortir = true;
        pos = i;
    }  
    pos = double(n) - double(pos);
    return (90 - 180*(double((double(pos) - 1)/(double(n) - 1))));
}

string transformar(string s) {
    long int n = 0;
    int k = s.size();
    long int deu = 1;
    for (int i = k - 1; i >= 0; --i) {n += (s[i] - '0')*deu;deu *= 10;}
    int i = 0;
    vector <char> n2(1000000);
    for (;n>0;n/=2) {
      n2[i] = (n%2)+'0';
      ++i;
    }
    string s2(i,'0');
    for (int j = i - 1; j >= 0; --j) s2[j] = n2[i - 1 - j];
    return s2;
}

int main() {  
    int y;
    cin >> y;
    string x;
    while (y > 0) {
        cin >> x;
        if (x[0] == '1' and x.size() == 10) cout << int (angulo(x)) << endl;
        else  cout << int (angulo(transformar(x))) << endl;  
        --y;
    }
}


anita

  • Visitante
Re: problema oie rastreador
« Respuesta #1 en: Diciembre 27, 2009, 08:53:13 pm »
Hola!

Que problema tienes? Que no te funciona correctamente? Cual es el enunciado del programita que has hecho? Asi te puedo echar una manita mejor  ;)

Desconectado llos

  • Novato
  • *
  • Mensajes: 5
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #2 en: Diciembre 27, 2009, 09:22:29 pm »
el programa que he puesta es una solucion del programa de la pagina del oie que se llama rastreador


lo he adjuntado el enunciado...pero es que la solucion con este codigo da exactamente igual que las propuestas pero cuando lo envio me da incorrecto asi que no se... weno cabe decir que los casos binarios me dan correctos pero no los casos decimales (eso una vez enviado) pero las entradas propuestas me dan todas bien
« última modificación: Diciembre 27, 2009, 09:24:36 pm por llos »

anita

  • Visitante
Re: problema oie rastreador
« Respuesta #3 en: Diciembre 27, 2009, 10:21:12 pm »
Pues mirando el problema no veo ningún error aparente, lo único que revises la función de pasar números de base 10 a base 2, con números grandes y en los límites que te define el problema, a ver si eso te genera correctamente el número binario que luego pasas a la función de generar el resultado. Ya que por lo que me comentas parece que por ahi podría estar el error.

Ya me dices que tal vas  ;)

Desconectado llos

  • Novato
  • *
  • Mensajes: 5
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #4 en: Diciembre 27, 2009, 10:43:30 pm »
he provado el numero mas grande... i me da bien asi que por rangos no es...

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #5 en: Diciembre 27, 2009, 10:47:07 pm »
En principio, los puntos claves los haces bien

1) Redondear a cero
2) Observas que si es numero el tamaño siempre es mejor que 9 y asi distingues un tipo de otros

No veo a simple vista problema en tu codigo, pero los errores pueden venir
1) Por la conversion decimal/binario
2) Precision en la division y el redondeo (Aunque lo dudo).
3) No queda claro en el enunciado (y dudo que sea asi, solo es una idea loca) , pero dice "un numero decimal entre 2 y 999999999" ¿Incluira 2.1 por ejemplo?
4) (Menos probable) Error en los juegos de prueba internos.

Si tengo un rato intentare hacerlo yo de cero, a ver que tal me sale.

Si das con la solucion nos dices, un saludo

Desconectado llos

  • Novato
  • *
  • Mensajes: 5
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #6 en: Diciembre 27, 2009, 10:53:02 pm »
perfecto lo de los numeros no creo que sea con decimales... pero no se quiza algun redondeo...ire provando

Desconectado Alex Alvarez

  • Novato
  • *
  • Mensajes: 6
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #7 en: Diciembre 27, 2009, 10:53:52 pm »
Como a ojo no se veía ningún error, he probado y ha sido tal y como pensaba, problemas con los reales. Haces muchas conversiones innecesarias y eso es jugar con fuego :P

Te pongo tu mismo código con unas cuantas modificaciones, así obtiene los 100 puntos.
Código: [Seleccionar]
#include <iostream>
#include <vector>
using namespace std;

double angulo (string s) {
    int n = s.size();
    bool sortir = false;
    int pos;
    for (int i = n - 1; i >= 0 and not sortir; --i) {
        if (s[i] == '1') sortir = true;
        pos = i;
    }   
    pos = n - pos;
    return 90.0 - 180.0*double(pos-1)/double(n - 1);
}

string transformar(string s) {
    long int n = 0;
    int k = s.size();
    long int deu = 1;
    for (int i = k - 1; i >= 0; --i) {n += (s[i] - '0')*deu;deu *= 10;}
    int i = 0;
    vector <char> n2(1000000);
    for (;n>0;n/=2) {
      n2[i] = (n%2)+'0';
      ++i;
    }
    string s2(i,'0');
    for (int j = i - 1; j >= 0; --j) s2[j] = n2[i - 1 - j];
    return s2;
}

int main() {   
    int y;
    cin >> y;
    string x;
    while (y > 0) {
        cin >> x;
        if (x[0] == '1' and x.size() == 10) cout << int (angulo(x)) << endl;
        else  cout << int (angulo(transformar(x))) << endl; 
        --y;
    }
}

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #8 en: Diciembre 27, 2009, 11:08:11 pm »
Leccion aprendida, no jugar con fuego con los decimales, aunque cabe decir que "en teoria" tal como lo tenias no debia haber perdida de precision, (ya que solo aplicas conversiones de double o entero a doubles , nunca salvo al final pasas de double a entero ) pero la teoria y la practica a veces difieren ;)

Desconectado llos

  • Novato
  • *
  • Mensajes: 5
    • Ver Perfil
Re: problema oie rastreador
« Respuesta #9 en: Diciembre 28, 2009, 08:18:47 am »
Mercy!!!! jeejjeje esque las conversiones las puse, pq al ver que no me daba estava colapsado i la unica razon que me venia era que no diera bien alguna operacion

gracias cracks!!!
me vereis mas por aqui que quiero hacer bastantes del oie