problem z zadaniem

0

Witam,
Mógłby ktoś rzucić okiem na mój program i powiedzieć co jest źle ? Zadanie: http://pl.spoj.pl/problems/MWP3_3D/
Gdy kompiluje program u siebie wyniki są dobre a tam mi wywala, że błędna odpowiedź :( Oto kod:

 #include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
int main()
{
   ios_base::sync_with_stdio(0);
   unsigned int t;
   scanf("%u", &t);
   unsigned int  *ciecia= new unsigned int[t];
   double *co_ile=new double[t];
   unsigned int *n = new unsigned int[t];
   double  *d = new double[t];
   for(unsigned int j=0; j<t; j++)
   {
    cin >>d[j]>>n[j];
   }
   for(unsigned int i=0; i<t; i++)
   {
   if(n[i]%2!=0) {ciecia[i]=n[i]; co_ile[i]=(((d[i]/2)*M_PI*2)/(n[i]*2));}
   else {ciecia[i]=n[i]/2; co_ile[i]=(((d[i]/2)*M_PI*2)/n[i]);}
   printf("%.3f",co_ile[i]);
   printf(" %u\n",ciecia[i]);
   }
    return 0;
}

zamiast

cin >>d[j]>>n[j]; 

chciałem użyć scanf("%f", &d[j]) i scanf("%u", &n[j])

 ale nie działało poprawnie.
0

%f to float a nie double, stąd też zapewne nie działało ;]
A co do spoja zapewne gdzie masz jednak błąd w algorytmie. Pamiętaj że SPOJ testuje to na RÓŻNYCH zestawach danych, nie tylko na przykładowym.

0

zamieniłem %f na %lf czyli double (dzięki za podpowiedź) i dalej jest 'błędna odpowiedź' mimo, że sprawdzałem nie tylko dla przykładowego jednego testu na stronie tylko dla 10:

2486540 548933
52553964 299450
80690983 828742
3490343 101271
20077468 303754
96796537 273435
32874850 428692
41441013 215681
34548404 772181
51149622 912955

Porównałem z wynikami innej osoby, której przeszło to zadanie i wyniki mam takie same jak ona :( Głowię się już nad tym trochę czasu i dalej nie wiem co mogę mieć źle.

0

Ojeju, zupełnie niepotrzebnie wczytujesz wszystko do tablicy... Nawet jak przejdzie ci błędną odpowiedź, dostaniesz przekroczenie czasu albo pamięci ;)
Nie prościej tak?

 
cin >> t;
while (t--)
{
    cin >> d >> n;
    
    //tutaj obliczenia
    printf("%.3f", co_ile);
    printf(" %u\n", ciecia);
}

A jeszcze lepiej tego printfa zmienić na:
printf("%.3f %u\n", co_ile[i], ciecia);

A sprawdzałeś wartości graniczne?
(10 ≤ d ≤ 108; 3 ≤ n ≤ 106)

0

Faktycznie, niepotrzebnie robiłem te dwie tablice. Dzięki za podpowiedź. Sprawdzałem wartości graniczne i mam dobre wyniki. Już naprawdę nie wiem co może być źle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1