Hellenico

Συζητήσεις για προετοιμασία για τον διαγωνισμό, online διαγωνισμούς, βιβλία προγραμματισμού και αλγορίθμων, και όλων των σχετικών.
Απάντηση
Marilenatsiop
Δημοσιεύσεις: 27
Εγγραφή: Παρ Ιουν 12, 2020 10:04 am

Re: Hellenico

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

Οκ! Το βρήκα ( char x; ... cin>> x;)
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Marilenatsiop έγραψε: Δευ Ιουν 15, 2020 11:50 pm Οκ! Το βρήκα ( char x; ... cin>> x;)
Καλώς όρισες στο forum και συγχαρητήρια για την επιμονή σου! Πράγματι πολύ σωστά το έκανες.
Καλή συνέχεια, είμαστε εδώ για ό,τι χρειαστείς!
Λύσεις θεμάτων ΠΔΠ: 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/
Marilenatsiop
Δημοσιεύσεις: 27
Εγγραφή: Παρ Ιουν 12, 2020 10:04 am

Re: Hellenico

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

ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
Spoiler: show
[/#include <iostream>
#include <cmath>
using namespace std;

int main() {
int n,T, t , s;
double time;
cin>> n;

while (n--){
cin >> t >> s;
T+=t;
time+= (s-time)*t/T;
}
int ans=round(time);
cout<< ans;
return 0;
}]
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Marilenatsiop έγραψε: Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
Spoiler: show
[/#include <iostream>
#include <cmath>
using namespace std;

int main() {
int n,T, t , s;
double time;
cin>> n;

while (n--){
cin >> t >> s;
T+=t;
time+= (s-time)*t/T;
}
int ans=round(time);
cout<< ans;
return 0;
}]
Η λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!
Το λαθάκι σου είναι ότι υποθέτεις ότι οι μεταβλητές σου είναι αρχικοποιημένες σε 0 (πχ δες τη μεταβλητή T, που της κάνεις +=, ενώ δεν ξέρεις τι τιμή είχε αρχικά). Κάποια συστήματα (όπως ο υπολογιστής σου) αρχικοποιούν τις μεταβλητές σε 0 ούτως ή άλλως, και κάποια άλλα όχι. Ο δικός μου υπολογιστής και το hellenico για παράδειγμα δε τις αρχικοποιούσαν σε 0.
Προφανώς χρειάζεται να διαβάσεις από / γράψεις σε αρχείο, και είσαι έτοιμη!
Λύσεις θεμάτων ΠΔΠ: 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/
Marilenatsiop
Δημοσιεύσεις: 27
Εγγραφή: Παρ Ιουν 12, 2020 10:04 am

Re: Hellenico

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

Κηπουρίδης έγραψε: Δευ Ιούλ 06, 2020 12:17 am
Marilenatsiop έγραψε: Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
Spoiler: show
[/#include <iostream>
#include <cmath>
using namespace std;

int main() {
int n,T, t , s;
double time;
cin>> n;

while (n--){
cin >> t >> s;
T+=t;
time+= (s-time)*t/T;
}
int ans=round(time);
cout<< ans;
return 0;
}]
Η λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!
Το λαθάκι σου είναι ότι υποθέτεις ότι οι μεταβλητές σου είναι αρχικοποιημένες σε 0 (πχ δες τη μεταβλητή T, που της κάνεις +=, ενώ δεν ξέρεις τι τιμή είχε αρχικά). Κάποια συστήματα (όπως ο υπολογιστής σου) αρχικοποιούν τις μεταβλητές σε 0 ούτως ή άλλως, και κάποια άλλα όχι. Ο δικός μου υπολογιστής και το hellenico για παράδειγμα δε τις αρχικοποιούσαν σε 0.
Προφανώς χρειάζεται να διαβάσεις από / γράψεις σε αρχείο, και είσαι έτοιμη!

Ευχαριστώ πολύ για την βοήθεια !!!
Δοκιμάζοντας βρήκα οτι χρειάζεται να αρχικοποιήσω μόνο το time και όχι το Τ ( με int Τ; περναει όλα τα test cases ).....;;;
Συνεχίζω στην ενότητα 1.2....!!!!
ΕΥΧΑΡΙΣΤΩ
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Marilenatsiop έγραψε: Δευ Ιούλ 06, 2020 5:54 pm
Κηπουρίδης έγραψε: Δευ Ιούλ 06, 2020 12:17 am
Marilenatsiop έγραψε: Κυρ Ιούλ 05, 2020 11:47 pm ΠΡΟΒΛΗΜΑ 3 , Ενότητα 1.1 Hellenico
Ο κώδικάς μου βγάζει σωστό αποτέλεσμα σε δικά μου test cases αλλά στο hellenico τα βγάζει όλα λάθος.Θα μπορούσα να έχω κάποια βοήθεια ;;;
Spoiler: show
[/#include <iostream>
#include <cmath>
using namespace std;

int main() {
int n,T, t , s;
double time;
cin>> n;

while (n--){
cin >> t >> s;
T+=t;
time+= (s-time)*t/T;
}
int ans=round(time);
cout<< ans;
return 0;
}]
Η λογική σου είναι σωστή και με μικρές αλλαγές έκανα τον κώδικά σου να περάσει. Όμως ομολογώ... ότι δεν έχω ιδέα τι μαγικά κάνεις!
Το λαθάκι σου είναι ότι υποθέτεις ότι οι μεταβλητές σου είναι αρχικοποιημένες σε 0 (πχ δες τη μεταβλητή T, που της κάνεις +=, ενώ δεν ξέρεις τι τιμή είχε αρχικά). Κάποια συστήματα (όπως ο υπολογιστής σου) αρχικοποιούν τις μεταβλητές σε 0 ούτως ή άλλως, και κάποια άλλα όχι. Ο δικός μου υπολογιστής και το hellenico για παράδειγμα δε τις αρχικοποιούσαν σε 0.
Προφανώς χρειάζεται να διαβάσεις από / γράψεις σε αρχείο, και είσαι έτοιμη!

Ευχαριστώ πολύ για την βοήθεια !!!
Δοκιμάζοντας βρήκα οτι χρειάζεται να αρχικοποιήσω μόνο το time και όχι το Τ ( με int Τ; περναει όλα τα test cases ).....;;;
Συνεχίζω στην ενότητα 1.2....!!!!
ΕΥΧΑΡΙΣΤΩ
Γενικά είναι ιδιαίτερα τυχαίο το τι χρειάζεται να αρχικοποιήσεις. Μπορεί τώρα να το τρέξεις σε κάποιο ακόμα μηχάνημα και να χρειάζεται αρχικοποίηση και το Τ. Οπότε συνήθισε να τα αρχικοποιείς όλα!

Καλή συνέχεια στην ενότητα 1.2, ελπίζω να σου αρέσουν τα προβλήματα!!
Λύσεις θεμάτων ΠΔΠ: 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/
Marilenatsiop
Δημοσιεύσεις: 27
Εγγραφή: Παρ Ιουν 12, 2020 10:04 am

Re: Hellenico

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

Καλησπέρα!!!
Στο πρόβλημα 3της ενότητας 1.2 μου λέει οτι βγαίνω εκτος πίνακα... καποια βοήθεια;;;


*στις τελευταίες γραμμές του κώδικα είναι ...wi άγγιστρο i άγγιστρο...
Spoiler: show
#include <iostream>
using namespace std;

int main() {
freopen ("elevator.in","r",stdin);
freopen("elevator.out","w",stdout);
int n,a,wi[n];
cin>>n;
for(int i=0; i<n; i++){
cin>>wi;
}

if(n%2==0){
a=n/2;
}else{
a=(n+1)/2;
}
cout<<a<<" ";

int is_sorted=0;
while (!is_sorted){
is_sorted = 1;
for (int j = 0; j < n-1 ; j++){
if(wi[j]>wi[j+1]){
is_sorted=0;
swap(wi[j],wi[j+1]);
}
}
}

// for(int i=0; i<n; i++){
// cout<<wi<<" ";
// }


int i=0;
int ans=0;
if(n%2==0){
ans =wi[0]+wi[n-1];
i=1;
}
else{
ans =wi[n-1];
i=0;
}

int j=n-2;
for( ; i<j; i++,j--){
if (ans< wi + wi[j]){
ans= wi + wi[j];
}
// cout<< wi + wi[j]<<" ";
}

cout<<ans;
return 0;
}
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

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

freopen("elevator.out","w",stdout);
int n,a,wi[n];
cin>>n;
Αρκεί να αναρωτηθεις τι διάσταση εχει ο πινακας που δημιουργήσες στην 2η γραμμη του παραπανω αποσπασματος κωδικα... :)

Στον προγραμματισμό ονομαζουμε "Δομη ακολουθιας" τη σειρα με την οποια εκτελουνται οι εντολες απο τον επεξεργαστη (ή το μεταγλωτιστη της γλωσσας προγραμματισμου).

Υγ. Δεν κοιταξα παρακατω στον κωδικα αν ειναι ενταξει.
Marilenatsiop
Δημοσιεύσεις: 27
Εγγραφή: Παρ Ιουν 12, 2020 10:04 am

Re: Hellenico

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

Κύριε ευχαριστώ...είχα υπέρβαση χρόνου σε κάποια τεστ αλλα αντικατέστησα το (while ! is_sorted) με της sort τησ algorithm και τωρα είναι οκ   :)



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

Re: Hellenico

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

Το bubble sort δεν είναι αποδοτικός αλγόριθμος για τυχαίους πίνακες γιατί μπορεί να χρειαστεί έως n^2/2 (ν τετράγωνο δια δυο) αντιμεταθέσεις. Ήταν όμως μια ωραία άσκηση για το μάθημα με τα συνδυασμένα loop: while και for :D.

Το sort στο algorithm είναι τύπου merge sort (μπορείς να το δεις στη wikipedia ή σε βίντεο στο youtube για να καταλάβεις πως λειτουργεί) και έχει πολύ καλύτερη απόδοση (έχει λογαριθμική πολυπλοκότητα).
Υπάρχει και ένας ακόμα τύπος sort στις βιβλιοθήκες της C++ που χρησιμοποιεί τη μέθοδο quick sort και περιέχεται στη βιβλιοθήκη cstdlib (συντάσσεται διαφορετικά).

λήψη.gif
λήψη.gif (41.27 KiB) Προβλήθηκε 4024 φορές
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

Καλησπέρα σας. Θα μπορούσε να με βοηθήσει κάποιος με το 1.1 3ο πρόβλημα (bandwidth)? Δεν έχω καταλάβει κάθε πότε πρέπει να μειώνεται ο χρόνος των αρχείων. Κάθε φορά που τελειώνει κάθε ένα αρχείο ή μια φορά στο καθένα. Διότι έχω το πρώτο τεστ σωστό ενώ τα άλλα 9 λάθος.
Spoiler: show
#include <bits/stdc++.h>
using namespace std;

int main() {
freopen("downloads.in","r",stdin);
freopen("downloads.out","w",stdout);
vector <pair<int,int>> files;
int N,T,X,bandwidth(0);
long double tempfloat,time;
cin>>N;
for(int i=0; i<N; i++){
cin>>T>>X;
bandwidth+=T;
files.push_back(make_pair(T,X));
}
sort(files.begin(),files.end());
time=X;

for(int i=1; i<N; i++){
tempfloat=files.second;
tempfloat=(files.second-time)*files.first/bandwidth;
time+=tempfloat;
}
cout<<llround(time);
return 0;
}
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

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

Re: Hellenico

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

Σε ευχαριστώ για την απάντησή σου switch. Νομίζω πως έχει γιατί έχω μόνο το πρώτο από τα 10 testcases σωστά και δεν ξέρω πού έχω κάνει λάθος. Μπορείς να δεις τον κώδικά μου στο spoiler που έχω στο προηγούμενό μου μήνυμα. Και μια εξήγηση... Η μεταβλητή tempfloat ήταν αρχικά να είναι ενα temporary float που μετά αποφάσισα να κάνω long double οπότε θα έπρεπε να την λενε templdouble. Θα εκτιμούσα την περαιτέρω βοήθειά σου στο πρόβλημά μου...
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 9:59 pm Σε ευχαριστώ για την απάντησή σου switch. Νομίζω πως έχει γιατί έχω μόνο το πρώτο από τα 10 testcases σωστά και δεν ξέρω πού έχω κάνει λάθος. Μπορείς να δεις τον κώδικά μου στο spoiler που έχω στο προηγούμενό μου μήνυμα. Και μια εξήγηση... Η μεταβλητή tempfloat ήταν αρχικά να είναι ενα temporary float που μετά αποφάσισα να κάνω long double οπότε θα έπρεπε να την λενε templdouble. Θα εκτιμούσα την περαιτέρω βοήθειά σου στο πρόβλημά μου...
Καλησπέρα Δημήτρη.

Θα σου πω μια συμβουλή για να είναι πιο πιθανό να παίρνεις απαντήσεις που θα σε βοηθάνε. Συνήθως βοηθάει να εξηγήσεις σε φυσική γλώσσα το ΤΙ προσπάθησες να κάνεις, και μετά ο κώδικας να εξηγεί το ΠΩΣ το έκανες. Για παράδειγμα το ΤΙ κάνεις θα μπορούσε να ήταν ότι επιλέγεις την εργασία που τελειώνει νωρίτερα, και μοιράζεις την ταχύτητά της σε όλες τις άλλες εργασίες ισομερώς. Κάποιος άλλος, στο ΤΙ κάνει θα μπορούσε να επιλέγει την εργασία που τελειώνει νωρίτερα και να αναθέτει την ταχύτητά της σε μία τυχαία εργασία. Και βεβαίως υπάρχουν πάρα πολλοί τρόποι ακόμα.

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

Το πώς ξεχωρίζεις το ΤΙ απ' το ΠΩΣ είναι εύκολο. Το ΤΙ μπορείς να το εξηγήσεις και σε άνθρωπο που δεν έχει την παραμικρή ιδέα από προγραμματισμό/γλώσσες προγραμματισμού κλπ.

Περιμένουμε λοιπόν την επεξήγησή σου για το τι θες να πετύχεις, και θα προσπαθήσουμε με χαρά να σε βοηθήσουμε!

Καλή συνέχεια παλικάρι μου.
Λύσεις θεμάτων ΠΔΠ: 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_ »

Κηπουρίδης έγραψε: Τετ Ιούλ 22, 2020 11:06 pm
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 9:59 pm Σε ευχαριστώ για την απάντησή σου switch. Νομίζω πως έχει γιατί έχω μόνο το πρώτο από τα 10 testcases σωστά και δεν ξέρω πού έχω κάνει λάθος. Μπορείς να δεις τον κώδικά μου στο spoiler που έχω στο προηγούμενό μου μήνυμα. Και μια εξήγηση... Η μεταβλητή tempfloat ήταν αρχικά να είναι ενα temporary float που μετά αποφάσισα να κάνω long double οπότε θα έπρεπε να την λενε templdouble. Θα εκτιμούσα την περαιτέρω βοήθειά σου στο πρόβλημά μου...
Καλησπέρα Δημήτρη.

Θα σου πω μια συμβουλή για να είναι πιο πιθανό να παίρνεις απαντήσεις που θα σε βοηθάνε. Συνήθως βοηθάει να εξηγήσεις σε φυσική γλώσσα το ΤΙ προσπάθησες να κάνεις, και μετά ο κώδικας να εξηγεί το ΠΩΣ το έκανες. Για παράδειγμα το ΤΙ κάνεις θα μπορούσε να ήταν ότι επιλέγεις την εργασία που τελειώνει νωρίτερα, και μοιράζεις την ταχύτητά της σε όλες τις άλλες εργασίες ισομερώς. Κάποιος άλλος, στο ΤΙ κάνει θα μπορούσε να επιλέγει την εργασία που τελειώνει νωρίτερα και να αναθέτει την ταχύτητά της σε μία τυχαία εργασία. Και βεβαίως υπάρχουν πάρα πολλοί τρόποι ακόμα.

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

Το πώς ξεχωρίζεις το ΤΙ απ' το ΠΩΣ είναι εύκολο. Το ΤΙ μπορείς να το εξηγήσεις και σε άνθρωπο που δεν έχει την παραμικρή ιδέα από προγραμματισμό/γλώσσες προγραμματισμού κλπ.

Περιμένουμε λοιπόν την επεξήγησή σου για το τι θες να πετύχεις, και θα προσπαθήσουμε με χαρά να σε βοηθήσουμε!

Καλή συνέχεια παλικάρι μου.
Φυσικά, εννοείται πως θα σας εξηγήσω όσο πιο αναλυτικά μπορώ! Ευχαριστώ, θα μου χρειαστεί και στο μέλλον αυτή η συμβουλή! Λοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω. Παίρνω τον πρώτο χρόνο και τον αποθηκεύω στην time. Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο) πολλαπλασιαμένο με την ταχύτητά του και διαιρεμένο με το bandwidth το οποίο έχει ως τιμή το άθροισμα όλων των ταχυτήτων, όλων των αρχείων μας. Τέλος, το time στρογγυλοποιείται στην πλησιέστερη μονάδα (ακέραιος). Θεωρώ ότι με 2 αρχεία (όπως το παράδειγμα που δίνουν) το πρόγραμμα λειτουργεί σωστά. Με 3 αρχεία και πάνω μάλλον όχι. Ίσως, απ' ό,τι κατάλαβα και εγω το λάθος να είναι ότι παίρνω ξεχωριστά κάθε ταχύτητα και κάνω τις πράξεις μία φορά. Τη δεύτερη φορά που (μάλλον) πρέπει να κατανεμηθεί ξανά το bandwidth κάτι δεν γίνεται σωστά. Μήπως θα μπορούσατε να με βοηθήσετε στο πώς να ξανακατανείμω το bandwidth (δηλαδή το λάθος στον κώδικα); Σας ευχαριστώ πολύ...
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

Η βασική σου ιδέα είναι γενικά καλή. Η υλοποίηση θέλει δουλίτσα και ίσως κάποιες λεπτομέρειες ακόμα. Είσαι σε καλό δρόμο όμως.
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pmΛοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω.
Ταξινομείς με το bandwidth (σε αύξουσα σειρά). Αυτό ήθελες να κάνεις;
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pm Παίρνω τον πρώτο χρόνο και τον αποθηκεύω στην time.
Παίρνεις έναν τυχαίο χρόνο και τον βάζεις στην time (πιο συγκεκριμένα παίρνεις τον τελευταίο χρόνο του αρχείου εισόδου αγνοώντας την ταξινόμηση που έκανες). Θέλει διόρθωση
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pm Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο)...
Το κάθε στοιχείο; Έχεις βάλει loop for αλλά πάντα διαβάζεις ένα στοιχείο του πίνακα. Δες τη σύνταξη του vector για βοήθεια.
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

switch έγραψε: Πέμ Ιούλ 23, 2020 12:45 am Η βασική σου ιδέα είναι γενικά καλή. Η υλοποίηση θέλει δουλίτσα και ίσως κάποιες λεπτομέρειες ακόμα. Είσαι σε καλό δρόμο όμως.
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pmΛοιπόν, στον παραπάνω κώδικα αποθηκεύω κάθε ζεύγος (ταχύτητα - χρόνος) σε ενα vecror το οποίο μετα sortαρω.
Ταξινομείς με το bandwidth (σε αύξουσα σειρά). Αυτό ήθελες να κάνεις;
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pm Παίρνω τον πρώτο χρόνο και τον αποθηκεύω στην time.
Παίρνεις έναν τυχαίο χρόνο και τον βάζεις στην time (πιο συγκεκριμένα παίρνεις τον τελευταίο χρόνο του αρχείου εισόδου αγνοώντας την ταξινόμηση που έκανες). Θέλει διόρθωση
_Dimitris_ έγραψε: Τετ Ιούλ 22, 2020 11:24 pm Μετά η time παίρνει συνέχεια κι άλλες τιμές, το κάθε στοιχείο (χρόνο)...
Το κάθε στοιχείο; Έχεις βάλει loop for αλλά πάντα διαβάζεις ένα στοιχείο του πίνακα. Δες τη σύνταξη του vector για βοήθεια.
Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο, πρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;

Το loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε. Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Hellenico

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

_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
γιατί; Φοβάσαι μήπως τον χάσεις; :D Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου.
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου ;)
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
ξανά: γιατί;
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;

Μερικές παρατηρήσεις στον κώδικα σου:

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

  sort...
  time=X;
εδω είναι ο τυχαίος χρόνος που παίρνεις (ότι ήταν αποθηκευμένο στην Χ, αρα τον τελευταίο χρόνο που διάβασες από το αρχείο). Η γραμμή αυτή όπως καταλαβαίνεις είναι άσχετη με την ταξινόμηση,

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

for...
tempfloat=files.second;
Τι θέλεις να κάνεις εδω; Μια περιττή γραμμή κώδικα;

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

tempfloat=(files.second-time)*files.first/bandwidth;
που υπάρχει αναφορά στη θέση i του πίνακα;
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

switch έγραψε: Πέμ Ιούλ 23, 2020 4:58 pm
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
γιατί; Φοβάσαι μήπως τον χάσεις; :D Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου.
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου ;)
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
ξανά: γιατί;
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;

Μερικές παρατηρήσεις στον κώδικα σου:

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

  sort...
  time=X;
εδω είναι ο τυχαίος χρόνος που παίρνεις (ότι ήταν αποθηκευμένο στην Χ, αρα τον τελευταίο χρόνο που διάβασες από το αρχείο). Η γραμμή αυτή όπως καταλαβαίνεις είναι άσχετη με την ταξινόμηση,

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

for...
tempfloat=files.second;
Τι θέλεις να κάνεις εδω; Μια περιττή γραμμή κώδικα;

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

tempfloat=(files.second-time)*files.first/bandwidth;
που υπάρχει αναφορά στη θέση i του πίνακα;
Καλησπέρα. Ο ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ είναι integer αλλά όταν διαιρεθεί με bandwidth γίνεται double.
Όπως βλέπω στο παράδειγμα, το 22 (ο ελάχιστος χρόνος) δεν παθαίνει κάποια αλλαγή. Ο άλλος παθαίνει με αυτήν την πράξη και από 57 γίνεται 21 (22+21=43). Με τον παραπάνω κώδικα, το output σε αυτό το testcase είναι όντως 43. Έχεις/Έχετε δίκιο με το time=X. Θα ήταν καλύτερο το time=files[0].second αφού γίνεται η ταξινόμηση με βάση τον χρόνο (τότε το time θα έχει τον ελάχιστο χρόνο, το 22 στο παράδειγμα). Όσο για την περιττή γραμμή κώδικα, ναι όντως είναι άκυρη. Αναφορά στο i γίνεται μετά από κάθε φορά που λέει files, μέσα σε αγκύλες (στη θέση i του vector). Απλά δεν μου το παίρνει το forum εξαιτίας των αγκυλών.
_Dimitris_
Δημοσιεύσεις: 35
Εγγραφή: Τετ Ιούλ 22, 2020 4:55 pm

Re: Hellenico

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

_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 7:05 pm
switch έγραψε: Πέμ Ιούλ 23, 2020 4:58 pm
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Όχι όχι, η ταξινόμηση γίνεται με βάση την ταχύτητα, το πρώτο στοιχείο (στο παράδειγμα το 3 και το 2). Επίσης παίρνω πάντα τον πρώτο χρόνο, οχι έναν τυχαίο αλλά τώρα που το ξανασκεφτομαι επειδή θέλω να πάρω τον ελάχιστο χρόνο,
γιατί; Φοβάσαι μήπως τον χάσεις; :D Ενω θα τον υπολογίσεις και αυτόν με τον τύπο σου.
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amπρέπει να κάνω την ταξινόμηση με βάση το δεύτερο στοιχείο, σωστα δεν λεω;
δεν θα σου απαντήσω για την ταξινόμηση ακόμα. Θα σε αφήσω να το βρεις μόνος σου ;)
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 amΤο loop (for) τρέχει όσα είναι τα στοιχεία - 1, το αρχικό γιατί τον μικρότερο χρόνο δεν θέλουμε να τον πειράξουμε.
ξανά: γιατί;
_Dimitris_ έγραψε: Πέμ Ιούλ 23, 2020 1:18 am Επομένως κάνω την πράξη ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ/BANDWIDTH στο κάθε στοιχείο...
Αυτό πρέπει να το σκεφτείς καλά. Ο τύπος σου είναι σωστός. Τι μέγεθος μας δίνει το χρονος*ταχυτητα;

Μερικές παρατηρήσεις στον κώδικα σου:

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

  sort...
  time=X;
εδω είναι ο τυχαίος χρόνος που παίρνεις (ότι ήταν αποθηκευμένο στην Χ, αρα τον τελευταίο χρόνο που διάβασες από το αρχείο). Η γραμμή αυτή όπως καταλαβαίνεις είναι άσχετη με την ταξινόμηση,

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

for...
tempfloat=files.second;
Τι θέλεις να κάνεις εδω; Μια περιττή γραμμή κώδικα;

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

tempfloat=(files.second-time)*files.first/bandwidth;
που υπάρχει αναφορά στη θέση i του πίνακα;
Καλησπέρα. Ο ΧΡΟΝΟΣ*ΤΑΧΥΤΗΤΑ είναι integer αλλά όταν διαιρεθεί με bandwidth γίνεται double.
Όπως βλέπω στο παράδειγμα, το 22 (ο ελάχιστος χρόνος) δεν παθαίνει κάποια αλλαγή. Ο άλλος παθαίνει με αυτήν την πράξη και από 57 γίνεται 21 (22+21=43). Με τον παραπάνω κώδικα, το output σε αυτό το testcase είναι όντως 43. Έχεις/Έχετε δίκιο με το time=X. Θα ήταν καλύτερο το time=files[0].second αφού γίνεται η ταξινόμηση με βάση τον χρόνο (τότε το time θα έχει τον ελάχιστο χρόνο, το 22 στο παράδειγμα). Όσο για την περιττή γραμμή κώδικα, ναι όντως είναι άκυρη. Αναφορά στο i γίνεται μετά από κάθε φορά που λέει files, μέσα σε αγκύλες (στη θέση i του vector). Απλά δεν μου το παίρνει το forum εξαιτίας των αγκυλών.

Ο κώδικας διορθωμένος μέχρι στιγμής (πάλι μόνο το 1ο από τα 10 testcases του hellenico είναι σωστό)
Spoiler: show
#include <bits/stdc++.h>
using namespace std;

bool sortbysecond(const pair<int,int> &a,const pair<int,int> &b){
return (a.second < b.second);
}

int main() {
freopen("downloads.in","r",stdin);
freopen("downloads.out","w",stdout);
vector <pair<int,int>> files;
int N,T,X,bandwidth(0);
long double temp,time;
cin>>N;
for(int i=0; i<N; i++){
cin>>T>>X;
bandwidth+=T;
files.push_back(make_pair(T,X));
}
sort(files.begin(),files.end(),sortbysecond);
time=files[0].second;

//στην παρκάτω for, όπου είναι "ι", στον κώδικά μου είναι i απλά δεν το παίρνει το forum
for(int i=1; i<N; i++){
temp=(files[ι].second-time)*files[ι].first/bandwidth;
time+=temp;
}
cout<<llround(time);
return 0;
}
Απάντηση