|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2008
Città: Padova
Messaggi: 172
|
[C++ o Pascal] L'essenza di un fiore raro
Ragazzi mi serve urgente aiuto con questo programma da creare o in Pascal o in C++
L'essenza di un fiore raro è molto ricercata tra i profumieri. Il prezzo di mercato viene fissato giornalmente dal CGE, il Consorzio dei Grossisti di Essenze. Inoltre, essendo di natura organica, l'essenza acquistata da un profumiere deperisce dopo un certo periodo e quindi può essere rivenduta so *soltanto entro K giorni dall'acquisto (data di scadenza). *Un profumiere è venuto a conoscenza del prezzo di mercato dell'essenza che il CGE prevede per i prossimi N giorni (N ≥ K), per semplicità numerati da 1 a N. Ritenendo molto affidabili le previsioni del CGE, il profumiere intende comprare una certa quantità di essenza il giorno i per rivenderla il giorno j, tenendo presente però che non può andare oltre la data di scadenza (quindi deve essere i ≤ j *(quindi deve essere i ≤ j ≤ i+K). Il profumiere intende fare un solo acquisto e una sola vendita successiva all'acquisto. *Aiutate il profumiere a calcolare il massimo guadagno che può ottenere, calcolato come la differenza tra il prezzo dell'essenza al giorno j e quello al giorno i. Notate che è permesso scegliere j=i: in questo modo, anche se il prezzo di mercato dell'essenza fosse in discesa per tutto il periodo considerato, sarebbe possibile evitare perdite. *Dati di input Il file input.txt è composto da due righe. La prima riga contiene due interi positivi separati da uno spazio, rispettivamente il numero K di giorni per la data di scadenza e il numero N di prossimi giorni. La seconda riga contiene N interi positivi separati da uno spazio, i quali rappresentano il prezzo di vendita dell'essenza nei prossimi N giorni. *Dati di output Il file output.txt è composto da una sola riga contenente un intero che rappresenta il massimo guadagno del profumiere, con le regole descritte sopra. Assunzioni 1 ≤ N ≤ 1000, 1 ≤ K ≤ N . *Esempi di input/output File input.txt File output.txt 2 6 3 6 2 6 9 6 7 Nota/e Un programma che restituisce sempre lo stesso valore, indipendentemente dai dati in input.txt, non totalizza alcun punteggio in aggiunta a quello ottenuto per la sua compilazione Qualcuno può darmi una mano?
__________________
PACKARD BELL Easy Note TJ75@CPU INTEL Core i5 430M //GPU ATI RADEON HD 5470//RAM CORSAIR 4GB DDR3// HD WESTERN DIGITAL 640GB SATAII 3.0 GB/s |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
[[OT]]
Non penso che questo post ti sarà d'aiuto, ho scritto la soluzione in factor, giusto come esercizio personale (sto cercando di imparare il linguaggio)... Codice:
USING: kernel sequences grouping math math.parser splitting
prettyprint strings ascii ;
: collect-data ( seq -- max )
dup first [ - ] curry map supremum ;
: flower-power ( seq k -- )
<clumps> [ collect-data ] [ max ] map-reduce ;
: read-valid-days ( -- k )
readln " " split1 drop string>number 1+ ;
: read-previsions ( -- seq )
readln [ blank? not ] filter >array
[ 1string string>number ] map ;
: main ( -- )
read-valid-days read-previsions swap flower-power . ;
Tornando in topic cmq... l'idea è quella di prendere tutte le sottosequenze che vanno da i a i+k, fare la differenza tra il primo valore e gli altri, e prendere il massimo. Poi prendere il massimo dei massimi delle varie sottosequenze. Ma credo di essermi spiegato malissimo...
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 109
|
Dicono che fare come hai fatto tu corrisponde a barare
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Come ho fatto io? Come ho fatto che? Dove sarebbe la truffa?
Comunque, l'ho riscritto, magari ora è più leggibile (e c'era pure un bug nel prendermi in pasto le previsioni). Codice:
USING: kernel sequences grouping math math.parser splitting
prettyprint strings ascii ;
: get-valid-days ( -- k+1 )
readln " " split1 drop string>number 1+ ;
: get-previsions ( -- seq )
readln " " split [ string>number ] map ;
: best-group-sell ( seq -- max )
dup first [ - ] curry [ max ] map-reduce ;
: best-global-sell ( seq k -- best-sell )
<clumps> [ best-group-sell ] [ max ] map-reduce ;
: flower-power ( -- )
get-valid-days get-previsions swap best-global-sell . ;
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers Ultima modifica di shinya : 03-04-2009 alle 10:00. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
![]() Eh non si fa, non si fa...
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
l'hanno dato alle olimpiadi di informatica; ora non mi ricordo come l'ho risolto; ma bastano un paio di cicli annidati confrontando dal presso di un dato giorno fino a quello della scadenza
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 109
|
L'ho fatto anch'io
Del baro lo davo a lui (CertainDeath) che in piena prova chiedeva che glie lo risolvessero =.= Ultima modifica di Krat0s : 03-04-2009 alle 14:02. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Forse mi manca un dato.
Ma il guadagno dovrebbe essere infinito oppure 0. Se esiste anche solo un giorno tale per cui il prezzo e' inferiore a qualsiasi dei giorni successivi (fatta salva la scadenza), allora comprero' infinite essenze in quel giorno per rivenderle il giorno giusto... O forse il limite e' che si puo' comprare una sola essenza al giorno? Edit: Si infatti e' cosi'. Ho letto dopo il vincolo. Anche venderne una sola pero'. Vabbe'. Bruttino come limite questo ma vabbe'.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 109
|
Nono, non è infinito. Devi prendere il guadagno di una essenza. Praticamente il se il file di input era così:
3 9 1 5 7 4 9 2 6 1 8 il risultato era un file di output contenente il valore 7 |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
Quote:
Codice:
USING: kernel sequences grouping math math.parser splitting
prettyprint strings ;
IN: flower-power
: get-valid-days ( -- k+1 )
readln " " split1 drop string>number 1+ ;
: fix-previsions ( k seq -- k newseq )
over [ 0 ] replicate append ;
: get-previsions ( -- seq )
readln " " split [ string>number ] map ;
: best-group-sell ( seq -- max )
dup first [ - ] curry [ max ] map-reduce ;
: best-global-sell ( seq k -- best-sell )
<clumps> [ best-group-sell ] [ max ] map-reduce ;
: flower-power ( -- )
get-valid-days get-previsions fix-previsions
swap best-global-sell . ;
MAIN: flower-power
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers Ultima modifica di shinya : 03-04-2009 alle 14:50. |
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: Sep 2008
Città: Padova
Messaggi: 172
|
Quote:
Magari fosse per me.. Poi alla fine il mio amico è arrivato ultimo
__________________
PACKARD BELL Easy Note TJ75@CPU INTEL Core i5 430M //GPU ATI RADEON HD 5470//RAM CORSAIR 4GB DDR3// HD WESTERN DIGITAL 640GB SATAII 3.0 GB/s |
|
|
|
|
|
|
#13 |
|
Member
Iscritto dal: Jun 2008
Messaggi: 109
|
A noi i risultati non ce li hanno dati, ma mi sa che anch'io tanto bene non mi sono posizionato |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:02.





















