Ciao a tutti,
al di là della correttezza o meno della mia soluzione (per la quale certamente tornerò sul forum)… qualcuno sa dirmi perchè il primo output mi dà risultato sbagliato, mentre eseguendolo in locale è giusto?
#include <bits/stdc++.h>
using namespace std;
long long int percorri(int N, long long int L, long long int D[], long long int P[]) {
long long int minimo=1, massimo, medio,ris=L;
bool ok,cambio;
int iprec,app;
massimo=L;
while(massimo>=minimo){
//cout<<ris<<" ";
medio=(massimo+minimo)/2;
//cout<<minimo<<" "<<medio<<" "<<massimo<<endl;
iprec=-1;
for(int i=0;D[i]<=medio;i++){
if(D[i]+P[i]<=medio)
iprec=i;
}
if(iprec==-1){
minimo=medio+1;
continue;
}
while(1){
ok=false;
cambio=false;
app=0;
for(int i=iprec+1; i<N;i++){
if(P[iprec]+D[i]-D[iprec]>medio)
break;
if(P[iprec]+D[i]-D[iprec]+P[i]<=medio){
app=i;
ok=true;
}
}
if(D[iprec]+medio-P[iprec]>=L){
cambio=true;
if(medio <ris)
ris=medio;
}
if(cambio){
massimo=medio-1;
break;
}
iprec=app;
if(!ok){
minimo=medio+1;
break;
}
}
}
//cout<<ris;
return ris;
}