Shopping malls 35/100


#1

Ciao a tutti; sia nella gara di venerdì che nel tempo libero che sto avendo questi giorni ho tentato di portare malls al 100; tuttavia per un solo output incorretto fallisco la subtask 4, mentre per due output la subtask 3, tutto il resto ridà. Mi sto arrovellando da due giorni su quale possa essere l’errore che io abbia fatto, ma più provo e meno mi convinco di aver sbagliato. Vi allego il mio codice qui sotto (ho tolto il maggiore all’inizio delle librerie perchè l’editor del testo qui sul forum lo riconosce come tag e non come testo:

#include fstream>
#include algorithm>
using namespace std;

int main()
{
  fstream in, out;
  in.open("input.txt",ios::in);
  out.open("output.txt",ios::out);
 long long int n,max=0,pos=0,k,i,j;
  in>>n;
  in>>k;
  long long int v[n];
  for(i=0;i<n;i++)
  	in>>v[i];
  sort(v,v+n);
  for(i=0;i<n-1;i++)
	{
		if((v[i+1]-v[i])>=max)
		  {
		  	max=v[i+1]-v[i];
		  	pos=v[i];
		  }
		  //out<<max<<" "<<pos<<endl;
	}
	if((v[0]!=0)&&(v[0]>=max))
	{
		max=0;
		pos=0;
	}
	if((k-v[n-1])>=max)
		{	
			if((k-v[n-1])>=v[0])
			{
				max=0;
				pos=k;
			}
			
		}
	out<<(max/2)+pos;
	in.close();
	out.close();
return 0;
}

Grazie in anticipo a chi mi illuminerà


#2

Da un primo sguardo quando controlli che v[0] sia diverso da 0 per verificare se 0 è una buona posizione dove mettere il nuovo centro commerciale, nel caso in cui conviene scegliere 0 come posizione max non prende il valore di v[0].
Poi dovresti fare lo stesso controllo per la fine della strada a v[n-1] e provare a verificare se conviene metterlo su K.
Mettendo il codice come spoiler non riesco a copiarlo per debbugarlo sul mio editor.


#3

Non ho capito, perchè dovrei prendere il valore di v[0] se io comunque faccio il controllo solo per piazzarmi in 0?
Comunque ho tolto lo spoiler


#4

Prova questo input:

5 50
5 10 20 30 42

Il tuo codice restituisce come output 36, mentre la posizione migliore dove mettere il centro commerciale è alla fine della strada, quindi a 50.


#5

Non avevo visto il controllo, il copia e incolla del codice ha sballato un po’ tutto <.<
il codice qua sotto è per chi vuole vederlo meglio xd

#include <iostream >
#include <fstream >
#include <algorithm >
using namespace std;

int main()
{
    fstream in, out;
    in.open(“input.txt”, ios::in);
    out.open(“output.txt”, ios::out);
    long long int n, max = 0, pos = 0, k, i, j;
    in >> n;
    in >> k;
    long long int v[n];
    for (i = 0; i < n; i++)
        in >> v[i];
    sort(v, v + n);
    for (i = 0; i < n - 1; i++) {
        if ((v[i + 1] - v[i]) >= max) {
            max = v[i + 1] - v[i];
            pos = v[i];
        }
        //out<<max<<" "<<pos<<endl;
    }
    if ((v[0] != 0) && (v[0] >= max)) {
        max = 0;
        pos = 0;
    }
    if ((k - v[n - 1]) >= max) {
        if ((k - v[n - 1]) >= v[0]) {
            max = 0;
            pos = k;
        }
    }
    out << (max / 2) + pos;
    in.close();
    out.close();

    return 0;
}

#6

Oh verissimo, grazie mille, deve essere senz’altro questo l’errore. Faccio il controllo agli estremi con max/2 invece che con max e vedo


#7

100, grazie ancora a tutti, mi chiedo come abbia fatto a perdermi una scemenza del genere lol


#8

Anche noi abbiamo perso un po’ di tempo durante la gara per questo motivo, per questo ho visto subito l’errore :slight_smile: