zwykły kod z linuxa nie działa na windowsie

0

Witam! Napisałem taki oto kod do zadania odważniki z ostatniego ILOCAMP i nie przechodzi testów. Co ciekawe gdy ściągnąłem testy na windowsie program zwraca dobre wyniki, jednak na linuksie jest grupa testów dla których ten sam kod zwraca zupełnie inne wyniki (takie same jak na sprawdzaczce). Niestety są to błędy dotyczące wyników w plikach dość dużych więc sprawdzenie ręczne nie wchodzi w grę. Czym to może być spowodowane i jak to naprawić? Kod:

 #include <iostream>
#include <cstdlib>
#include <cmath>
#define LL long long
#define REP(a,b) for(int a=0; a<b; a++)
#define FOR(a,b,c) for(int a=b; a < c; a++)
#define FORD(a,b,c) for(int a=b-1; a >= c; a--)
using namespace std;
const int stala=1000003;
int n,suma;
LL czarne[stala+1];
int szare[stala];
int lewy(int i){return czarne[i]-czarne[i-1];}
int prawy(int i){return czarne[n]-czarne[i];}
int main()
{
    scanf("%d\n",&n);
    FOR(i,1,n+1){
        scanf("%d",&czarne[i]);
       czarne[i]+=czarne[i-1];
    }
    szare[0]=0;
    REP(i,n)
        scanf("%d",&szare[i+1]);
    sort(szare,szare+n+1);
    REP(i,n){
        if(*lower_bound(szare,szare+n+1,lewy(i)-prawy(i))==lewy(i)-prawy(i))//czy mozna wymienic
        {
            if(*lower_bound(szare,szare+n+1,2*lewy(i))==2*(lewy(i)))
            {
                printf("%d\n",i);return 0;}
        }
    }
    printf("%d\n",n);
    return 0;
}
0

1.Zacznijmy od tego, że to się nawet nie kompiluje: http://ideone.com/0JLRA3
2.czarne[i]+=czarne[i-1]; jesteś pewien, że jest to dobrze? czarne[i-1] może być niezainicjowane i równe jakiejś randomowej wartości z pamięci.
3.A tak w ogóle, to w końcu jak jest z tym programem - działa na Linuxie (patrz: temat) czy działa na Windowsie (patrz: treść postu)? :|

0
  1. Na windowsie się kompiluje. Na linuksie trzeba dodać 2 biblioteki(algorithm,cstdio)
  2. czarne jest zadeklarowane przed main'em więc wszystkie komórki są wypełnione zerami, a nie randomowymi wartościami ;)
  3. Działa na windowsie, nie działa na linuksie, sorki za błąd w temacie ;P
0

Może kompilujesz innym kompilatorem ?

0

Używasz nazw "sort" i "lower_bound" nie zostały one zadeklarowane w programie który podałeś. Dlatego się na linuxie nie kompiluje.

0

Kod kompilujący się pod linuksem po paru poprawkach, który niestety dalej nie działa na linuksie ;/

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define LL long long
using namespace std;
const int stala=1000003;
int n,suma;
LL czarne[stala+1];
int szare[stala+1];
int lewy(int i){return czarne[i]-czarne[i-1];}
int prawy(int i){return czarne[n]-czarne[i];}
int main()
{
    scanf("%d\n",&n);
    for(int i=1;i<n+1;i++){
        scanf("%lld",&czarne[i]);
       czarne[i]+=czarne[i-1];
    }
    szare[0]=0;
	for(int i=0; i <n ; i++)
        scanf("%d",&szare[i+1]);
    sort(szare,szare+n+1);
    for(int i=1; i < n;i++){
        if(*lower_bound(szare,szare+n+1,lewy(i)-prawy(i))==lewy(i)-prawy(i))//czy mozna wymienic
        {
            if(*lower_bound(szare,szare+n+1,2*lewy(i))==2*(lewy(i)))
            {
                printf("%d\n",i);return 0;}
        }
    }
    printf("%d\n",n);
    return 0;
}

 
0

Ok, już działa. Gdzieś się obracała liczba, bo gdy zmieniłem wszystko na long long zadziałało. Dziwne tylko że na windowsie się nie obracało, a na linuksie już tak.

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