#include <stdio.h>
#include <assert.h>
int compra(int N, int M, int A, int B) {
int ans=0;
int C=2, T;
if(N*A < B) {
ans=N*A;
}else{
if(N < M) {
ans=B;
}else{
T=N-M;
if(B+T*A < 2*B) {
ans=B+T*A;
}else{
while(C*M < N) {
C=C+1;
}
ans=C*B;
}
}
}
return ans;
}
int main() {
FILE *fr, *fw;
int N, M, A, B;
fr = fopen("input.txt", "r");
fw = fopen("output.txt", "w");
assert(4 == fscanf(fr, "%d%d%d%d", &N, &M, &A, &B));
fprintf(fw, "%d\n", compra(N, M, A, B));
fclose(fr);
fclose(fw);
return 0;
}
Potresti spiegarti meglio? Magari indicando il problema, se hai errori di compilazione, di risultato o di TLE?
Mi da come risultato 10/100. Non riesco a capire dove sbaglio.
Per poterti aiutare sarebbe utile se dicessi il TITOLO del problema, così che possiamo dare un’occhiata e vedere cosa non funziona nella tua implementazione
Allora, se ti da 10/100 significa che hai fatto solo i casi di esempio (c’è scritto nell’assegnazione del punteggio nel testo del problema). Ciò implica che il tuo algoritmo non è abbastanza generalizzato.
Prova a scrivere il tuo algoritmo tenendo conto di queste domande:
- Quando conviene acquistare un carnet?
- Quando conviene acquistare solo biglietti singoli?
- Quando conviene acquistare un tot di carnet e un tot di biglietti singoli?
Dimmi come va!
Per la risoluzione di ‘Biglietti a MIlano’ devi considerare più situazioni differenti. Ti trovi in un mondo immaginario dove puoi avere diversi casi. Devi trovare un modo generale per controllare:
a. Quando conviene acquistare tutti biglietti singoli
b. Quando conviene acquistare un pacchetto
c. Quando conviene acquistare tot pacchetti e tot singoli.
Ricorda però: supponi di aver bisogno di 27 biglietti, in una tua ipotetica soluzione potresti considerare di comprare 2 pacchetti e 7 singoli, Attenzione però! Potrebbe essere comunque più conveniente prendere 3 pacchetti.
N*A è da tenere in considerazione non solo nel primo if…