Hellenico

Συζητήσεις για προετοιμασία για τον διαγωνισμό, online διαγωνισμούς, βιβλία προγραμματισμού και αλγορίθμων, και όλων των σχετικών.
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

Δημοσίευση από switch »

Μήπως δεν θα έπρεπε να το πολλαπλασιάσω με την ταχύτητα που είχε εξαρχής (Μα αυτό δείχνει το παράδειγμα!!!) ή κάτι ξεχνώ; Η πράξη είναι ακριβώς αυτή που βλέπω στην εκφώνηση της άσκησης, δεν καταλαβαίνω τι πρέπει να κάτσω να σκεφτώ να βρω ☹️..
Η ταχύτητα που κατεβαίνει το αρχειο δεν ειναι απαραιτητα σταθερη. Εξαρτατε απο την υλοποιηση που θα δωσεις. Το παραδειγμα δεν σου δεινει τη λυση, σου δειχνει ακριβως ενα παράδειγμα υπολογισμου συγκεκριμένης περιπτωσης. Δεν σε δεσμευει να το ακολουθεις παντα οπως ειναι. Αλλιως θα ηταν στις απαιτησεις του προβληματος.

Παράδειγμα: εφοσον στη δικια σου υλοποιηση, το δευτερο αρχειο εχει κατεβει για ενα χρονο με την αναγραφόμενη ταχυτητα του και για ενα χρονο με το bandwidth, τοτε πρεπει να υπολογισεις ΠΟΣΟ αρχειο κατεβηκε με τη μια ταχυτητα και ποσο με την αλλη (ολο το bandwidth).
Οταν θα εχεις τρια αρχεια, ποσες αλλαγες (αυξησεις) στην ταχυτητα σκοπευεις να κανεις για το τριτο αρχειο;

Μερικες φορες η γνωση της πραγματικοτητας μας δυσκολευει να καταλαβουμε την αποτύπωση ενος προβλήματος.
Το κατεβασμα στην περιπτωση μας αφορα πακετα tcp μονο (ειναι κατεβασμα αρχειων). Οι server μας στέλνουν πακετα σταθερου μεγεθους (ας πουμε μιας μοναδας μεγεθους για ευκολια, δηλαδη αρχειο μεγεθους 3200, θα εχει 3200 πακέτα ). Πως ξερουν με τι ταχυτητα να στειλουν οι servers; καθε φορα που λαμβανουμε ενα πακετο , στελνουμε μια επιβεβαιωση ληψης και ο server μας στελνει το επόμενο πακετο. Οι επιβεβαιώσεις δεν επηρεάζουν το download bandwidth (εχουν το δικο τους upload bandwidth).

Εμεις με περιορισμο στο δικο μας bandwidth, λαμβανουμε συγκεκριμένο αριθμο πακετων ανα δευτερόλεπτο. Αυτα τα πακετα μπορουν να ειναι απο ενα αρχειο, απο δυο, απο .... N αρχεια. Αρκει να κραταμε πάντα πληρες το download bandwidth μας.

Ο τυπος που βαζεις, δεν ασχολείται σωστα με τις αλλαγες ταχύτητας απο τρια κ πανω αρχεία. Θελει διορθωση σε κάποια-ες λεπτομέρειες. Ολα παιζουν ρολο απο το ΠΩΣ θα μοιρασεις το bandwidth. Δεν μπορεις να λαβεις περισσότερα πακετα συνολικα στη μοναδα του χρονου αλλα ουτε και λιγοτερα.

(Στο τελος που θα καταλαβεις το προβλημα και θα το εχεις λυσει, θα βλεπεις ολη αυτη τη συζήτηση και θα γελας. Εχει συμβει σε ολους μας να κολλησουμε σε κατι απλο καποτε :))

Υγ. Εγραψα απο κινητο και δεν με βολευαν οι τονοι. Εγραψα... ατονα! Sorry
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

switch έγραψε: Σάβ Ιούλ 25, 2020 9:16 am
Μήπως δεν θα έπρεπε να το πολλαπλασιάσω με την ταχύτητα που είχε εξαρχής (Μα αυτό δείχνει το παράδειγμα!!!) ή κάτι ξεχνώ; Η πράξη είναι ακριβώς αυτή που βλέπω στην εκφώνηση της άσκησης, δεν καταλαβαίνω τι πρέπει να κάτσω να σκεφτώ να βρω ☹️..
Η ταχύτητα που κατεβαίνει το αρχειο δεν ειναι απαραιτητα σταθερη. Εξαρτατε απο την υλοποιηση που θα δωσεις. Το παραδειγμα δεν σου δεινει τη λυση, σου δειχνει ακριβως ενα παράδειγμα υπολογισμου συγκεκριμένης περιπτωσης. Δεν σε δεσμευει να το ακολουθεις παντα οπως ειναι. Αλλιως θα ηταν στις απαιτησεις του προβληματος.

Παράδειγμα: εφοσον στη δικια σου υλοποιηση, το δευτερο αρχειο εχει κατεβει για ενα χρονο με την αναγραφόμενη ταχυτητα του και για ενα χρονο με το bandwidth, τοτε πρεπει να υπολογισεις ΠΟΣΟ αρχειο κατεβηκε με τη μια ταχυτητα και ποσο με την αλλη (ολο το bandwidth).
Οταν θα εχεις τρια αρχεια, ποσες αλλαγες (αυξησεις) στην ταχυτητα σκοπευεις να κανεις για το τριτο αρχειο;

Μερικες φορες η γνωση της πραγματικοτητας μας δυσκολευει να καταλαβουμε την αποτύπωση ενος προβλήματος.
Το κατεβασμα στην περιπτωση μας αφορα πακετα tcp μονο (ειναι κατεβασμα αρχειων). Οι server μας στέλνουν πακετα σταθερου μεγεθους (ας πουμε μιας μοναδας μεγεθους για ευκολια, δηλαδη αρχειο μεγεθους 3200, θα εχει 3200 πακέτα ). Πως ξερουν με τι ταχυτητα να στειλουν οι servers; καθε φορα που λαμβανουμε ενα πακετο , στελνουμε μια επιβεβαιωση ληψης και ο server μας στελνει το επόμενο πακετο. Οι επιβεβαιώσεις δεν επηρεάζουν το download bandwidth (εχουν το δικο τους upload bandwidth).

Εμεις με περιορισμο στο δικο μας bandwidth, λαμβανουμε συγκεκριμένο αριθμο πακετων ανα δευτερόλεπτο. Αυτα τα πακετα μπορουν να ειναι απο ενα αρχειο, απο δυο, απο .... N αρχεια. Αρκει να κραταμε πάντα πληρες το download bandwidth μας.

Ο τυπος που βαζεις, δεν ασχολείται σωστα με τις αλλαγες ταχύτητας απο τρια κ πανω αρχεία. Θελει διορθωση σε κάποια-ες λεπτομέρειες. Ολα παιζουν ρολο απο το ΠΩΣ θα μοιρασεις το bandwidth. Δεν μπορεις να λαβεις περισσότερα πακετα συνολικα στη μοναδα του χρονου αλλα ουτε και λιγοτερα.

(Στο τελος που θα καταλαβεις το προβλημα και θα το εχεις λυσει, θα βλεπεις ολη αυτη τη συζήτηση και θα γελας. Εχει συμβει σε ολους μας να κολλησουμε σε κατι απλο καποτε :))

Υγ. Εγραψα απο κινητο και δεν με βολευαν οι τονοι. Εγραψα... ατονα! Sorry
Χαχα, μακάρι να το τελειώσω σύντομα. Άρα αυτό που κατάλαβα είναι ότι τα 12 πρώτα δευτερόλεπτα το τρίτο αρχείο θα κατεβαίνει με ταχύτητα 3 (kb/s). Και μετά όμως με τι ταχύτητα θα κατέβει; Αλλά και πάλι δεν καταλαβαίνω, αφού εμάς μας νοιάζει να βρούμε το χρόνο που θα πάρει στο τρίτο αρχείο να κατέβει. Απλά θέλω να μάθω πώς βγαίνει το 30 και δεν μπορώ μετά από τόσα που μου έχετε γράψει, σαν να σας απογοητεύω. Συγγνώμη αλλά δεν ξέρω πότε θα το καταλάβω πώς βγαίνει το 30 ☹️.
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

Δημοσίευση από Κηπουρίδης »

Πάντως Δημήτρη, επειδή νομίζω είσαι σε φάση που δεν καταλαβαίνεις τι πρέπει να σκεφτείς, θα σου δώσω μία λογική που είναι σωστή (ώστε να μπεις στο νόημα) αλλά είναι σκόπιμα πολύ χαζή. Διότι δε θέλω να την γράψεις, παρά μόνο να δεις ότι το 30 δεν είναι παράλογο, μετά θα είσαι ικανός να βρεις άλλη λογική, πιο 'φυσιολογική', που θα δίνει πάλι 30.

(Θα αναφέρομαι στο παράδειγμα που έδωσε ο switch)
Τα πρώτα 10 δευτερόλεπτα κατεβαίνουν τα πάντα όπως μας λέει εκφώνηση.
Άρα το πρώτο αρχείο τελειώνει, το δεύτερο, όπως μας είπες, έχει ακόμα [(20-10)second]*[20kb/s] =[200kb] να κατέβουν, το τρίτο έχει (30-10)*30=600kb ακόμα, και το τέταρτο έχει (40-10)*40=1200kb ακόμα να κατέβουν.

Τώρα μπορώ να μοιράσω τα 10kbps που απελευθερώθηκαν (επειδή τελείωσε το πρώτο αρχείο) στα υπόλοιπα αρχεία. Μπορώ να το κάνω με όποιο τρόπο θέλω. Θα τα δώσω όλα στο τρίτο αρχείο. Γιατί στο τρίτο; Γιατί επίτηδες κάνω την πιο περίεργη (αλλά σωστή) λύση που μου έρχεται στο μυαλό, α) για να σε πείσω ότι δουλεύει, και β) για να μη την αντιγράψεις αυτούσια, αλλά να βρεις δικιά σου.

Έχουμε και λέμε λοιπόν. Έχουν περάσει 10 δευτερόλεπτα. Το δεύτερο αρχείο κατεβαίνει με ταχύτητα 20kbps, κι άρα πόσο χρόνο χρειάζεται; Όσο το μέγεθος (που απομένει) δια την ταχύτητα, δηλαδή [200kb] / [20kb/s] = [10s]. Αντίστοιχα το τρίτο αρχείο κατεβαίνει με ταχύτητα 30+10=40kbps (30 ήταν η παλιά του, +10 που του έδωσα από το πρώτο αρχείο), και χρειάζεται χρόνο [600kb]/[40kb/s] = [15s]. Τέλος το τέταρτο κατεβαίνει με 40kbps κα χρειάζεται [1200kb]/[40kb/s] = [30s].

Όπως βλέπεις τώρα, τα επόμενα δέκα δευτερόλεπτα θα κατέβει και το δεύτερο αρχείο.
Το τρίτο αρχείο κατέβαινε με 40kbps αυτή τη φορά, κι άρα σε 10 δευτερόλεπτα κατέβασε 400kb, άρα του απομένουν 600-400=200kb. Το τέταρτο κατέβαινε κι αυτό με 40kbps, άρα του μένουν άλλα 800kb.

Θα δώσω όλο το bandwidth που έτρωγε το δεύτερο (τα 20kbps) στο τέταρτο αρχείο. Άρα πλέον το τρίτο κατεβαίνει με 40kbps και το τέταρτο με 60kbps. Πόσο χρόνο θέλει το τρίτο για να κατέβει (αν συνεχίσει έτσι); Του μένουν 200kb, κατεβάζει με 40, άρα θέλει 5 δευτερόλεπτα ακόμα. Στο τέταρτο απομένουν 800kb, κατεβάζει με 60, άρα του μένουν 13.3333333333s.

Περνάνε λοιπόν άλλα 5 sec (σύνολο 25 ως τώρα) και κατεβαίνει και το τρίτο αρχείο. Τώρα επειδή μένει μόνο ένα αρχείο, του δίνουμε όλο το bandwidth (100kbps). Πόσο kb μένουν στο τέταρτο αρχείο; Μένανε 800, και κατέβαζε με 60 για 5 δευτερόλεπτα. Άρα 800kb-[60kb/s]*[5s]=500kb. Κατεβάζει με 100 kbps, άρα θα τελειώσει σε 5sec.

Σύνολο χρόνου, 25+5 = 30.

Ανακεφαλαίωση. Έδειξα μια ηλίθια λύση (σωστή όμως). Τι την κάνει σωστή; Το γεγονός ότι τα πρώτα δέκα δευτερόλεπτα, το bandwidth ήταν μοιρασμένο στα 4 αρχεία ως (10,20,30,40), τα επόμενα δέκα ως (0,20,40,40), τα επόμενα 5 ως (0,0,40,60), και τα επόμενα 5 ως (0,0,0,100). Άρα πάντα, αν αθροίσεις τις 4 τιμές, βρίσκεις το ίδιο. Δηλαδή πάντα χρησιμοποιώ το ίδιο (μέγιστο) bandwidth. 10+20+30+40=20+40+40=40+60=100.

ΤΙ έκανε η λύση; Κάθε φορά που τελείωνε ένα αρχείο, έδινε το bandwidth του σε ένα random από τα εναπομείναντα αρχεία.
[Είμαι στο ΤΙ, δε μιλάω ούτε για πολλαπλασιασμούς, ούτε για αφαιρέσεις, αυτά είναι το ΠΩΣ. Κάτι παρόμοιο ζητάω κι από εσένα να μας περιγράψεις... θα μπορούσες με πολλούς τρόπους ακόμα... πχ κάθε φορά που τελειώνει ένα αρχείο, να δίνεις το 20% του bandwidth του στο παραεπόμενο αρχείο, και 80% στο παρα-παρα-επόμενο...].

ΠΩΣ το έκανα; Με τους πολλαπλασιασμούς/αφαιρέσεις/διαιρέσεις που περιέγραψα σε όλο το ποστ.

Η δικιά σου λύση μπορεί να είναι πιο έξυπνη, δηλαδή να απαιτεί λιγότερες πράξεις η υλοποίησή της (το ΠΩΣ της). Προφανώς, όπως είπαμε, αν φροντίζει να είναι σωστή (πάντα να μοιράζει ίδιο bandwidth παντού) τότε θα είναι εξίσου σωστή. Απλά η μαγκιά του προγραμματιστή είναι να πετυχαίνει τα πράγματα με τον απλούστερο δυνατό τρόπο.

[Edit] Όσο έγραφα αυτή την απάντηση, έγραψες κι εσύ τη δικιά σου. Μεγάλη βλακεία πέταξες στην προ-τελευταία πρόταση, μην ξαναπείς τέτοια θα μαλώσουμε.
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

Δημοσίευση από switch »

_Dimitris_ έγραψε: Σάβ Ιούλ 25, 2020 10:56 am Χαχα, μακάρι να το τελειώσω σύντομα. Άρα αυτό που κατάλαβα είναι ότι τα 12 πρώτα δευτερόλεπτα το τρίτο αρχείο θα κατεβαίνει με ταχύτητα 3 (kb/s).
Όσο θέλεις θα κατέβει. Αν θέλεις μπορεί να κατέβει με 0 ή με full throttle ή με 1 ή με 2 ή με 3. Το bandwidth πρέπει να είναι 100% καλυμμένο.
_Dimitris_ έγραψε: Σάβ Ιούλ 25, 2020 10:56 amΑλλά και πάλι δεν καταλαβαίνω, αφού εμάς μας νοιάζει να βρούμε το χρόνο που θα πάρει στο τρίτο αρχείο να κατέβει.
Βασικά μας νοιάζει να βρούμε ΕΝΑΝ χρόνο όπου ΟΛΑ τα αρχεία θα έχουν τελειώσει. Δεν ζητείται να απαντήσουμε για κανένα συγκεκριμένο αρχείο πότε θα τελειώσει καθότι δεν είναι εγγυημένο πότε θα τελειώσει κάθε αρχείο αλλά εξαρτάτε από την υλοποίηση που θα κάνουμε. Είναι βέβαιο όμως ότι αν έχουμε 100% το bandwidth καλυμμένο, θα χρειαστούμε συγκεκριμένο χρόνο για να ολοκληρώσουμε όλα τα κατεβάσματα και αυτός ο χρόνος είναι ο ζητούμενος
Τελευταία επεξεργασία από το μέλος switch την Σάβ Ιούλ 25, 2020 11:53 am, έχει επεξεργασθεί 1 φορά συνολικά.
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Ωραία παιδιά σας ευχαριστώ πολύ. Θα τα κοιτάξω με την ησυχία μου όταν βρω το χρόνο και θα σας ξαναγράψω σε λίγες μέρες, γιατί δεν θα είμαι σπίτι αυτό το ΣΚ. Είναι λίγο tricky το πρόβλημα πάντως! 😉
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

(Ό,τι και να λέω, όπου και να πάω, δεν μπορώ να σταματήσω να το σκέφτομαι και να προσπαθώ μανιωδώς για κάτι που αγαπώ και έχω καλά νέα. ΒΡΗΚΑ ΤΟ 30!!!!!!)

Σας ευχαριστώ και τους δύο, βοηθήθηκα πάρα πολύ από τον κ. Κηπουρίδη με την εξήγηση για αυτό το ρημάδι το 30. Απλώς εγώ έβρισκα το 100 το bandwidth και διαιρούσα συνεχώς με το 100 ενώ ήθελε στην αρχή με το 10, μετά με το 10+20 κ.ο.κ. Δεν χρειαζόταν καν vector δηλαδή απ' ό,τι συνειδητοποίησα (απλώς έχω μια αγάπη για τα vectors). Θα σας στείλω τον καινούργιο μου κώδικα που θα υποβάλω σε λίγο (μακάρι να πάρω 10/10) και για να απαντήσω στο δεύτερο ερώτημα, τo bandwidth ίσως και να έχει κάποια σημασία πώς θα το κατανειμουμε τελικά. Ευχαριστώ για τη βοήθεια θα το ξαναπώ γιατί είναι το λιγότερο που μπορώ να κάνω. Περιμένω απαντήσεις σας να συζητήσουμε λίγο το δεύτερο ερώτημα εφόσον έχετε την καλή διάθεση.

Ο κώδικας:
Spoiler: show

Κώδικας: Επιλογή όλων

#include <bits/stdc++.h>
using namespace std;

int main() {
freopen("downloads.in","r",stdin);
freopen("downloads.out","w",stdout);

int N, bandwidth(0), T, X;
double time;

cin>>N;

for (int i=0; i<N; i++){
cin>>T>>X;
bandwidth+=T;
time+=(X-time)*T/bandwidth;
}

cout<<round(time);
return 0;
}
EDIT: Έβαλα το testcase του παραδείγματος, βγάζω σωστό αποτέλεσμα. Βάζω το testcase του switch και βγάζω 30. Παρ' όλ' αυτά, 0/10 στο Hellenico. Τι μπορεί να φταίει πάλι;
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

Δημοσίευση από switch »

_Dimitris_ έγραψε: Σάβ Ιούλ 25, 2020 7:00 pmΈβαλα το testcase του παραδείγματος, βγάζω σωστό αποτέλεσμα. Βάζω το testcase του switch και βγάζω 30. Παρ' όλ' αυτά, 0/10 στο Hellenico. Τι μπορεί να φταίει πάλι;
Τι τιμή έχουν οι uninitialized local variables? :mrgreen:
Για το ερώτημα σου θα περιμένουμε να αιτιολογήσεις γιατί να έχει σημασία η σειρά που αποδίδουμε το bandwidth... :roll:
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

switch έγραψε: Σάβ Ιούλ 25, 2020 11:49 pm Τι τιμή έχουν οι uninitialized local variables? :mrgreen:
Αυτό λες να είναι το πρόβλημα; Στην αρχή απροσδιοριστη, μπούρδα αριθμός. Όμως του περνάω μια τιμή μετά οπότε πίστεψα ότι δεν θα υπάρχει θέμα. Θα δοκιμάσω να αρχικοποιησω όλες τις μεταβλητές μου ως μηδέν. Α μωρέ το time μάλλον θα κάνει το πρόβλημα. Θα σας ενημερώσω σε πολύ λίγο...
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

10/10 παιδιά (τη μία σας μιλάω στο πληθυντικό και την άλλη λέω παιδιά, δεν έχω καμία κακή πρόθεση όποια και να είναι η ηλικία σας) , σας ευχαριστώ πολύ!!!! Πριν προχωρήσω όμως θα ήθελα να συζητήσουμε γιατί δεν είχε νόημα πώς θα κατανεμειθεί το bandwidth. Νομίζω ότι αν έκανα διαφορετική πράξη θα είχα λάθος αποτέλεσμα γι'αυτό μου ακούγεται λίγο ξινό το ότι δεν έχει νόημα...
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

Δημοσίευση από switch »

Μπράβο που το έκανες. Δεν έχεις τελειώσει ακόμα ;)

Το πρόβλημα λύνεται ακόμα πιο απλά. Ίσως να σε βοηθήσει αν ξαναδείς ο σχήμα με τα χρωματιστά κουτάκια που είχα ανεβάσει... κάθε κουτάκι είναι (ας πούμε) ένα "πακέτο" tcp :D.

Επίσης, μήπως μπορείς να καταλάβεις γιατί έβρησκες μικρότερους χρόνους από τους αναμενόμενους;
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

switch έγραψε: Κυρ Ιούλ 26, 2020 12:09 am Μπράβο που το έκανες. Δεν έχεις τελειώσει ακόμα ;)

Το πρόβλημα λύνεται ακόμα πιο απλά. Ίσως να σε βοηθήσει αν ξαναδείς ο σχήμα με τα χρωματιστά κουτάκια που είχα ανεβάσει... κάθε κουτάκι είναι (ας πούμε) ένα "πακέτο" tcp :D.

Επίσης, μήπως μπορείς να καταλάβεις γιατί έβρησκες μικρότερους χρόνους από τους αναμενόμενους;
Χμμμ... Ναι γιατί του bandwidth του άλλαξα τα φώτα με το 100αρι. Διαιρούσα απανωτά με το 100 με αποτέλεσμα να μειώνεται το time. Όμως δεν μπορώ να απαντήσω το δεύτερο ερώτημα 😂
bettypan
Δημοσιεύσεις: 14
Εγγραφή: Σάβ Ιούλ 25, 2020 12:44 pm

Re: Hellenico

Δημοσίευση από bettypan »

switch έγραψε: Κυρ Ιούλ 26, 2020 12:09 am Μπράβο που το έκανες. Δεν έχεις τελειώσει ακόμα ;)

Το πρόβλημα λύνεται ακόμα πιο απλά. Ίσως να σε βοηθήσει αν ξαναδείς ο σχήμα με τα χρωματιστά κουτάκια που είχα ανεβάσει... κάθε κουτάκι είναι (ας πούμε) ένα "πακέτο" tcp :D.

Επίσης, μήπως μπορείς να καταλάβεις γιατί έβρησκες μικρότερους χρόνους από τους αναμενόμενους;
Καλημέρα!!! Υπάρχει και ΠΙΟ ΑΠΛΗ λύση;;;;;!!!!!
Την ίδια ακριβώς λύση και το ίδιο ακριβώς λαθάκι, με τον Δημήτρη, κάναμε και εμείς .....
Τώρα πια και ο μικρός μου, 6ετων, το έμαθε... και φωνάζει..:
« Αρχικοποίηση!!!»🤣😂
παιδεύουμε ακόμη το όνομα του Δελφινιού...!!!😉

RESPECT και ευχαριστούμε τον δάσκαλό μας και τον Κηπουρίδη!!
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Συμφωνώ! Ευχαριστούμε switch και Κηπουρίδη! Επίσης κάτι ακόμα. Στο δεύτερο πρόβλημα του 1.1, μήπως ξέρει κανείς γιατί έχω τα πρώτα 9 testcases σωστά και το δέκατο λάθος; Αν θέλετε, σας στέλνω και το κώδικά μου! Ευχαριστώ πολύ!
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

Δημοσίευση από Κηπουρίδης »

_Dimitris_ έγραψε: Κυρ Ιούλ 26, 2020 11:03 am Συμφωνώ! Ευχαριστούμε switch και Κηπουρίδη! Επίσης κάτι ακόμα. Στο δεύτερο πρόβλημα του 1.1, μήπως ξέρει κανείς γιατί έχω τα πρώτα 9 testcases σωστά και το δέκατο λάθος; Αν θέλετε, σας στέλνω και το κώδικά μου! Ευχαριστώ πολύ!
Καλημέρα παιδιά! Σας θερμοπαρακαλώ, πείτε μου ποια είναι η λογική πίσω απ' τον κώδικά σας, ειλικρινά δε μπορώ να καταλάβω γιατί λειτουργεί!!
Και για να με βοηθήσετε να καταλάβω, και για να εξασκηθείτε στη σωστή επιχειρηματολογία, ζητώ να μου εξηγήσετε τη λογική με όρους τελείως άσχετους με προγραμματισμό. Θέλω να μου πείτε κάτι του τύπου: Τελειώνω πρώτα την πρώτη εργασία, και μετά μοιράζω το bandwidth της σε όλες τις άλλες" ή "Τελειώνω πρώτα την ενδιάμεση εργασία, και μετά δίνω το bandwidth της στην τελευταία εργασία".

Κι ένα (φαινομενικά άσχετο) ερώτημα. Παίζεις έναν αγώνα "ποιος θα φάει πιο γρήγορα" με ένα φίλο σου. Στόχος να φάτε μία πίτσα (8 κομμάτια) όσο πιο γρήγορα γίνεται. Εσύ τρως με ταχύτητα 1 κομμάτι ανά λεπτό. Σε πόση ώρα θα φας όλα τα κομμάτια; Παίζει ρόλο αν θα φας πρώτα το πρώτο κομμάτι, μετά το δεύτερο, μετά το τρίτο, κλπ, ή αν θα τα φας με τυχαία σειρά;
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Κηπουρίδης έγραψε: Κυρ Ιούλ 26, 2020 11:27 am
_Dimitris_ έγραψε: Κυρ Ιούλ 26, 2020 11:03 am Συμφωνώ! Ευχαριστούμε switch και Κηπουρίδη! Επίσης κάτι ακόμα. Στο δεύτερο πρόβλημα του 1.1, μήπως ξέρει κανείς γιατί έχω τα πρώτα 9 testcases σωστά και το δέκατο λάθος; Αν θέλετε, σας στέλνω και το κώδικά μου! Ευχαριστώ πολύ!
Καλημέρα παιδιά! Σας θερμοπαρακαλώ, πείτε μου ποια είναι η λογική πίσω απ' τον κώδικά σας, ειλικρινά δε μπορώ να καταλάβω γιατί λειτουργεί!!
Και για να με βοηθήσετε να καταλάβω, και για να εξασκηθείτε στη σωστή επιχειρηματολογία, ζητώ να μου εξηγήσετε τη λογική με όρους τελείως άσχετους με προγραμματισμό. Θέλω να μου πείτε κάτι του τύπου: Τελειώνω πρώτα την πρώτη εργασία, και μετά μοιράζω το bandwidth της σε όλες τις άλλες" ή "Τελειώνω πρώτα την ενδιάμεση εργασία, και μετά δίνω το bandwidth της στην τελευταία εργασία".

Κι ένα (φαινομενικά άσχετο) ερώτημα. Παίζεις έναν αγώνα "ποιος θα φάει πιο γρήγορα" με ένα φίλο σου. Στόχος να φάτε μία πίτσα (8 κομμάτια) όσο πιο γρήγορα γίνεται. Εσύ τρως με ταχύτητα 1 κομμάτι ανά λεπτό. Σε πόση ώρα θα φας όλα τα κομμάτια; Παίζει ρόλο αν θα φας πρώτα το πρώτο κομμάτι, μετά το δεύτερο, μετά το τρίτο, κλπ, ή αν θα τα φας με τυχαία σειρά;
Στην πίτσα όλα τα κομμάτια είναι ίσα, γι'αυτό δεν έχει σημασία. Ενώ στο πρόβλημα δεν είναι όλα ίδια.

Η πράξη είναι η ίδια εκτός από τη διαίρεση του bandwidth. Τελικά δεν χρειάστηκε σορταρισμα οπότε μάλλον δεν παίζει ρόλο από πού θα ξεκινήσεις (σαν να είμαι λίγο αναποφασιστος 😂). Το bandwidth παίρνει τις προηγούμενες τιμές (bandwidth+=T) και διαιρεί τα kilobytes. Και ίσως είμαι έτοιμος να απαντήσω στο δεύτερο ερώτημα:

Λόγω της αντιμεταθετικής ιδιότητας στα μαθηματικά (α+β=β+α), με όποιον τρόπο και να προσθέσουμε τους χρόνους στο time θα βγει το ίδιο αποτέλεσμα. Επομένως άκυρο αυτό που είπα στην αρχή, δεν παίζει ρόλο από πού θα ξεκινήσεις (γι'αυτό δεν χρειάστηκε και το sort)!!!!

(Κάτι επιπλέον, μήπως ξέρετε γιατί γίνεται αυτό που σας είπα για το δεύτερο πρόβλημα;)
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Αυτός είναι ο κώδικας για το δεύτερο πρόβλημα του 1.1 και βγάζει λάθος το testcase 5 (οχι το 10 που ειπα στην αρχή). Μήπως λείπει κάποιο ίσον στους τελευταίους ελέγχους if...else if?
Spoiler: show

Κώδικας: Επιλογή όλων

#include <iostream>
using namespace std; 

int main() {
  freopen("tickets.in","r",stdin);
  freopen("tickets.out","w",stdout);
  int N(0),A(0),B(0),C(0),D(0),price(0),discount(0),priceA(0),priceB(0),priceC(0),priceD(0);
  cin>>N>>A>>B>>C>>D; 
 
  price=N*10;
  
  priceA=A*10-(A*10*1/10);
  priceB=B*10-(B*10*2/10); 
  priceC=C*10-(C*10*3/10);
  priceD=D*10-(D*10*5/10);
  
  if(N<B&&N>=A)discount=price*1/10;
  else if(N<C&&N>=B)discount=price*2/10;
  else if(N<D&&N>=C)discount=price*3/10;
  else if(N>=D)discount=price*5/10;
  
  price-=discount; 
  
  if(price>priceD&&N<D&&N>C) price=priceD;
  else if(price>priceC&&price<priceD&&N<C&&N>B)price=priceC;
  else if(price>priceB&&price<priceC&&N>A&&N<B)price=priceB;
  else if(price>priceA&&price<priceB&&N<A)price=priceA; 
  
  cout<<price; 
  return 0;
}
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

Δημοσίευση από Κηπουρίδης »

Αγαπητέ Δημήτρη, είναι σείρα μου να ομολογήσω ότι δεν κατάλαβα τι είπες (αποδεικνύοντας ότι πραγματικά αν κολλήσει το μυαλό, δύσκολα ξεκολλάει).
Πάντως κι εσύ ρε παιδί μου, σου ζητάω επιχειρηματολογία που να μην έχει να κάνει με πράξεις και προγραμματισμό, και μου απαντάς για διαιρέσεις, προσθέσεις, μέχρι και αντιμεταθετική ιδιότητα, έχω μπερδευτεί για τα καλά. Δε λέω σε καμμία περίπτωση ότι είναι λάθος αυτά που είπες (ίσα ίσα που σωστά ακούγονται) απλά δεν καταλαβαίνω το ΤΙ κάνεις. Σου ξαναζητώ λοιπόν να μου πεις κάτι τέτοιο:

"Τελειώνω πρώτα την πρώτη εργασία, και μετά μοιράζω (ισομερώς) το bandwidth της σε όλες τις άλλες"

Αυτό που έγραψα μπορώ να το εξηγήσω ακόμα και σε άνθρωπο που δεν ξέρει τι είναι η διαίρεση, η πρόσθεση, και άλλες πράξεις. Έτσι θέλω να μου το εξηγήσεις, μην υποθέτεις ότι καταλαβαίνω τα πιο σύνθετα γιατί απλά με υπερτιμάς!

Σχετικά με τον κώδικα για το πρόβλημα με τα εισιτήρια, εφόσον έχεις ήδη 9/10 σωστά, η λογική σου φαντάζομαι είναι σωστή (ευχαριστώς αν θες να τη συζητήσουμε, αλλά υπενθυμίζω, όχι να μου περιγράψεις τι πράξεις κάνεις, αλλά την ιδέα που θες να υλοποιήσεις). Οπότε τώρα το να βρεις το bug, ξέρω ότι είναι επίπονο, αλλά είναι και πολύ γόνιμο. Το αφήνω πάνω σου για δύο λόγους:
1) Μου είναι απίστευτα δύσκολο να καταλάβω ακόμα και δικούς μου κώδικες όταν έχει καιρό που τους έγραψα, πόσο μάλλον κώδικες άλλων.
2) Έχεις πολλά να μάθεις απ' το να ψάχνεις 3 μέρες ένα λάθος και να μη το βρίσκεις. Ξέρω πόσο σπαστικό είναι, αλλά δεν υπάρχει άλλος τρόπος να βελτιωθείς, ή τουλάχιστον εγώ μόνο έτσι κατάφερνα να βελτιωθώ.

Καλή σου συνέχεια κι ελπίζω να συνεχίσουμε να τα λέμε εδώ!
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Κηπουρίδης έγραψε: Κυρ Ιούλ 26, 2020 7:08 pm Αγαπητέ Δημήτρη, είναι σείρα μου να ομολογήσω ότι δεν κατάλαβα τι είπες (αποδεικνύοντας ότι πραγματικά αν κολλήσει το μυαλό, δύσκολα ξεκολλάει).
Πάντως κι εσύ ρε παιδί μου, σου ζητάω επιχειρηματολογία που να μην έχει να κάνει με πράξεις και προγραμματισμό, και μου απαντάς για διαιρέσεις, προσθέσεις, μέχρι και αντιμεταθετική ιδιότητα, έχω μπερδευτεί για τα καλά. Δε λέω σε καμμία περίπτωση ότι είναι λάθος αυτά που είπες (ίσα ίσα που σωστά ακούγονται) απλά δεν καταλαβαίνω το ΤΙ κάνεις. Σου ξαναζητώ λοιπόν να μου πεις κάτι τέτοιο:

"Τελειώνω πρώτα την πρώτη εργασία, και μετά μοιράζω (ισομερώς) το bandwidth της σε όλες τις άλλες"

Αυτό που έγραψα μπορώ να το εξηγήσω ακόμα και σε άνθρωπο που δεν ξέρει τι είναι η διαίρεση, η πρόσθεση, και άλλες πράξεις. Έτσι θέλω να μου το εξηγήσεις, μην υποθέτεις ότι καταλαβαίνω τα πιο σύνθετα γιατί απλά με υπερτιμάς!

Σχετικά με τον κώδικα για το πρόβλημα με τα εισιτήρια, εφόσον έχεις ήδη 9/10 σωστά, η λογική σου φαντάζομαι είναι σωστή (ευχαριστώς αν θες να τη συζητήσουμε, αλλά υπενθυμίζω, όχι να μου περιγράψεις τι πράξεις κάνεις, αλλά την ιδέα που θες να υλοποιήσεις). Οπότε τώρα το να βρεις το bug, ξέρω ότι είναι επίπονο, αλλά είναι και πολύ γόνιμο. Το αφήνω πάνω σου για δύο λόγους:
1) Μου είναι απίστευτα δύσκολο να καταλάβω ακόμα και δικούς μου κώδικες όταν έχει καιρό που τους έγραψα, πόσο μάλλον κώδικες άλλων.
2) Έχεις πολλά να μάθεις απ' το να ψάχνεις 3 μέρες ένα λάθος και να μη το βρίσκεις. Ξέρω πόσο σπαστικό είναι, αλλά δεν υπάρχει άλλος τρόπος να βελτιωθείς, ή τουλάχιστον εγώ μόνο έτσι κατάφερνα να βελτιωθώ.

Καλή σου συνέχεια κι ελπίζω να συνεχίσουμε να τα λέμε εδώ!
Φυσικά θα συνεχίσουμε να μιλάμε! Όσο για το ΤΙ θα ξανακάνω μια προσπάθεια να το πω αλλά άμα δεν το καταφέρω, με συγχωρείς πολύ.

Τελειώνει η πρώτη εργασία και το bandwidth μεταφέρεται στην επόμενη εργασία, δεν κατανέμεται εξίσου σε όλα τα υπόλοιπα, με αποτέλεσμα η τελευταία και μόνο εργασία να αποκτήσει το μεγαλύτερο bandwidth (100 στο παράδειγμά μας, η διαίρεση με το 100 έγινε μόνο στο τελευταίο. Αυτή η παρένθεση ήταν επεξηγητική, άσχετη με το ΤΙ που εξηγώ εκτός παρένθεσης).

Αυτό πιστεύω είναι το ΤΙ. Θα δοκιμάσω να κάνω το debug για το προηγούμενο, ίσως να φταίει ένα ίσον ή κάτι τέτοιο, τόσο δα μικρούλι σπαστικούλι. Όμως επειδή το έχω προσπαθήσει με διάφορα testcases και παίρνω σωστό αποτέλεσμα... Μήπως θα μπορούσε κάποιος να μου δώσει κάποια testcases να δοκιμάσω συγκεκριμένα που θα βοηθήσουν το debug. Μόνο αν σας είναι εύκολο και έχετε χρόνο (πχ Α=0).
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

Δημοσίευση από Κηπουρίδης »

Σχετικά με το tickets, μήπως κάνεις το εξής λάθος; Όπως ξαναείπα, δεν καταλαβαίνω εύκολα κώδικα άλλου, για αυτό απλά θα το ρωτήσω εδώ και σκέψου το μόνος σου. Κάποιες φορές ίσως βολεύει να αγοράσουμε ΠΟΛΥ περισσότερα εισιτήρια για να πάρουμε μία πολύ καλύτερη προσφορά. Πχ ενώ το Ν είναι μεταξύ Β και C, εγώ να ανέβω όχι απλά μέχρι το C, αλλά μέχρι το D! Για να πάρω την τέλεια προσφορά. Νομίζω ότι εσύ κοιτάς μόνο την αμέσως επόμενη προσφορά, κι όχι όλες.

Σχετικά με το downloads, ΜΠΡΑΒΟ παλικάρι μου!!! Ακριβώς αυτό ήταν το ΤΙ που ζητούσα, και τέλεια χρήση της παρένθεσης παρεμπιπτόντως. Ακριβώς έχοντας εξηγήσει ήδη το ΤΙ, μετά το ΠΩΣ με βοήθησε. Ενώ ένα σκέτο ΠΩΣ μόνο μπερδεύει.

Τώρα θα φλυαρίσω λίγο. Η λύση σου είναι πράγματι σωστή. ΑΛΛΑ! Μου πήρε μισή ώρα (με το ρολόι μετρημένη) για να αποδείξω το γιατί είναι σωστή. Θα σου ζητήσω να μου δώσεις την προσοχή σου για λίγο:

Πες ότι τελειώνει η πρώτη εργασία σε 10 δευτερόλεπτα, κι η δεύτερη σε 3. Εσύ περιμένεις 10 δευτερόλεπτα να τελειώσει η πρώτη εργασία. Και μετά δίνεις το bandwidth της στη δεύτερη. Δε θα μπλέξω με πράξεις. Το βλέπεις με το μάτι ότι δε στέκει αυτό; Αφού η δεύτερη έχει τελειώσει εδώ και 7 δευτερόλεπτα, εμείς πώς της δίνουμε και έξτρα bandwidth;;; Αντίστοιχα και με την τρίτη, και την τέταρτη, κλπ.

Ερώτηση 1) Καταλαβαίνεις γιατί μία ταξινόμηση θα βοηθούσε να αποφύγεις το παραπάνω πρόβλημα; Θέλω να πείσεις τον εαυτό σου ότι η λύση που προτείνεις είναι σωστή αν προηγηθεί ταξινόμηση στους χρόνους.
Ερώτηση 2) Μπορείς να φανταστείς τι θα ήταν περίεργο αν έκανες την ταξινόμηση, αλλά αντί να δίνεις το bandwidth στην αμέσως επόμενη εργασία, το έδινες στην τελευταία; Έχει να κάνει με το ότι αν η τελευταία τελειώσει πλέον πιο γρήγορα (λόγω του extra bandwidth) ίσως να μην είναι πια τελευταία.

Λοιπόν, αφού η λύση σου δεν κάνει ταξινόμηση, γιατί είναι σωστή; Αυτό είναι κάπως περίεργο να το αποδείξεις, και θα έπρεπε πρώτα να πείσεις τον εαυτό σου ότι δεν παίζει ρόλο με ποια σειρά κατεβάζεις. Ακόμα και να το αποδείξεις αυτό, είναι πολύ περίεργο να δεις γιατί η λύση σου είναι σωστή. Προσωπικά ξέρω μόνο μια μέθοδο με χρήση μαθηματικής επαγωγής για να το αποδείξεις, αλλά δε θα τη γράψω στο forum γιατί πιο πολύ κόσμο θα μπερδέψω παρά θα βοηθήσω.

Όμως έχω ένα καλό νέο. Αν καταλάβεις γιατί δεν παίζει ρόλο η σειρά με την οποία κατεβάζεις, τότε υπάρχει μια τρομερά απλή λύση που ίσως γράψουμε στο forum! Τόσο απλή, που καθιστά βαρετή τη συζήτηση για την προηγούμενη λύση.

Ξανασκέψου το παράδειγμα με τις πίτσες. Λες ότι όλα τα κομμάτια είναι ίσα... Αν πιάσεις 2 κομμάτια και τα πατήσεις ώστε να γίνουν ένα; Πλέον έχεις 7 κομμάτια πίτσας, τα 6 είναι φυσιολογικά, και το ένα είναι διπλό, που σημαίνει ότι χρειάζεσαι 2 λεπτά για να το φας, αντί για ένα λεπτό. Άλλαξε κάτι;;; Εγώ υποστηρίζω ότι πάλι 8 λεπτά θα σου πάρει να τα φας όλα, ανεξάρτητα από τη σειρά με την οποία διαλέγεις να τα φας.
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

Δημοσίευση από _Dimitris_ »

Κηπουρίδης έγραψε: Κυρ Ιούλ 26, 2020 8:28 pm Σχετικά με το tickets, μήπως κάνεις το εξής λάθος; Όπως ξαναείπα, δεν καταλαβαίνω εύκολα κώδικα άλλου, για αυτό απλά θα το ρωτήσω εδώ και σκέψου το μόνος σου. Κάποιες φορές ίσως βολεύει να αγοράσουμε ΠΟΛΥ περισσότερα εισιτήρια για να πάρουμε μία πολύ καλύτερη προσφορά. Πχ ενώ το Ν είναι μεταξύ Β και C, εγώ να ανέβω όχι απλά μέχρι το C, αλλά μέχρι το D! Για να πάρω την τέλεια προσφορά. Νομίζω ότι εσύ κοιτάς μόνο την αμέσως επόμενη προσφορά, κι όχι όλες.

Σχετικά με το downloads, ΜΠΡΑΒΟ παλικάρι μου!!! Ακριβώς αυτό ήταν το ΤΙ που ζητούσα, και τέλεια χρήση της παρένθεσης παρεμπιπτόντως. Ακριβώς έχοντας εξηγήσει ήδη το ΤΙ, μετά το ΠΩΣ με βοήθησε. Ενώ ένα σκέτο ΠΩΣ μόνο μπερδεύει.

Τώρα θα φλυαρίσω λίγο. Η λύση σου είναι πράγματι σωστή. ΑΛΛΑ! Μου πήρε μισή ώρα (με το ρολόι μετρημένη) για να αποδείξω το γιατί είναι σωστή. Θα σου ζητήσω να μου δώσεις την προσοχή σου για λίγο:

Πες ότι τελειώνει η πρώτη εργασία σε 10 δευτερόλεπτα, κι η δεύτερη σε 3. Εσύ περιμένεις 10 δευτερόλεπτα να τελειώσει η πρώτη εργασία. Και μετά δίνεις το bandwidth της στη δεύτερη. Δε θα μπλέξω με πράξεις. Το βλέπεις με το μάτι ότι δε στέκει αυτό; Αφού η δεύτερη έχει τελειώσει εδώ και 7 δευτερόλεπτα, εμείς πώς της δίνουμε και έξτρα bandwidth;;; Αντίστοιχα και με την τρίτη, και την τέταρτη, κλπ.

Ερώτηση 1) Καταλαβαίνεις γιατί μία ταξινόμηση θα βοηθούσε να αποφύγεις το παραπάνω πρόβλημα; Θέλω να πείσεις τον εαυτό σου ότι η λύση που προτείνεις είναι σωστή αν προηγηθεί ταξινόμηση στους χρόνους.
Ερώτηση 2) Μπορείς να φανταστείς τι θα ήταν περίεργο αν έκανες την ταξινόμηση, αλλά αντί να δίνεις το bandwidth στην αμέσως επόμενη εργασία, το έδινες στην τελευταία; Έχει να κάνει με το ότι αν η τελευταία τελειώσει πλέον πιο γρήγορα (λόγω του extra bandwidth) ίσως να μην είναι πια τελευταία.

Λοιπόν, αφού η λύση σου δεν κάνει ταξινόμηση, γιατί είναι σωστή; Αυτό είναι κάπως περίεργο να το αποδείξεις, και θα έπρεπε πρώτα να πείσεις τον εαυτό σου ότι δεν παίζει ρόλο με ποια σειρά κατεβάζεις. Ακόμα και να το αποδείξεις αυτό, είναι πολύ περίεργο να δεις γιατί η λύση σου είναι σωστή. Προσωπικά ξέρω μόνο μια μέθοδο με χρήση μαθηματικής επαγωγής για να το αποδείξεις, αλλά δε θα τη γράψω στο forum γιατί πιο πολύ κόσμο θα μπερδέψω παρά θα βοηθήσω.

Όμως έχω ένα καλό νέο. Αν καταλάβεις γιατί δεν παίζει ρόλο η σειρά με την οποία κατεβάζεις, τότε υπάρχει μια τρομερά απλή λύση που ίσως γράψουμε στο forum! Τόσο απλή, που καθιστά βαρετή τη συζήτηση για την προηγούμενη λύση.

Ξανασκέψου το παράδειγμα με τις πίτσες. Λες ότι όλα τα κομμάτια είναι ίσα... Αν πιάσεις 2 κομμάτια και τα πατήσεις ώστε να γίνουν ένα; Πλέον έχεις 7 κομμάτια πίτσας, τα 6 είναι φυσιολογικά, και το ένα είναι διπλό, που σημαίνει ότι χρειάζεσαι 2 λεπτά για να το φας, αντί για ένα λεπτό. Άλλαξε κάτι;;; Εγώ υποστηρίζω ότι πάλι 8 λεπτά θα σου πάρει να τα φας όλα, ανεξάρτητα από τη σειρά με την οποία διαλέγεις να τα φας.
Συμφωνώ μαζί σου, viva la pizza. Επίσης σε ευχαριστώ που με βοηθάς να καταλάβω τη λογική άσχετα με το 10/10. Δοκίμασα να βγάλω την ταξινόμηση κι είχα σωστό αποτέλεσμα, μετά δεν ξαναδοκίμασα να το ξανακάνω. Γιατί άραγε δεν έχει σχέση από πού θα ξεκινήσω; Μπερδεύτηκα τώρα, γιατί σαν να μου έδειξες ότι έχει σχέση με την παραπάνω απάντησή σου. Χίλια συγγνώμη (και ταυτόχρονα χίλια ευχαριστώ) που έχασες μισή ώρα για εμένα και το forum.

Όσο για το δεύτερο πρόβλημα, πράγματι δεν το είχα σκεφτεί αυτό που λες. Θα μπορούσα να είχα ένα testcase όπου να είσαι ανάμεσα σε B και C και να συμφέρει να πάρεις D εισιτήρια αντί για C? Θα ήταν πάρα πολύ βοηθητικό!

(Και για επιμέρους συζήτηση) Το πρώτο πρόβλημα της 1.1, ενώ θα έπρεπε να είναι πανεύκολο γιατί το έκαναν δύσκολο με την άνω και κάτω τελεία; Έπρεπε να το διαβάσεις όλο το αρχείο σαν έναν string και να αφαιρέσεις το ":" και μετά να διπλασιάσεις. Γιατί ο compiler περιμένει κενό για να χωρίσει τους αριθμούς, οχι άνω και κάτω τελεία. Όμως το έλυσα, αν και έγραψα αρκετές γραμμές κώδικα.
Απάντηση