Hellenico

Συζητήσεις για προετοιμασία για τον διαγωνισμό, online διαγωνισμούς, βιβλία προγραμματισμού και αλγορίθμων, και όλων των σχετικών.
Απάντηση
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

δλδ να μετατρέπω την είσοδο σε double κι στο τέλος να το ξανακάνω int?
pman
Δημοσιεύσεις: 419
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Hellenico

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

NikosZ έγραψε:δλδ να μετατρέπω την είσοδο σε double κι στο τέλος να το ξανακάνω int?
Μόνο μία πραγματική μεταβλητή θα χρειαστείς για να κρατήσεις το αποτέλεσμα ( float ή double ). Αφού βρεις τον αριθμό , στρογγυλοποιείς και τυπώνεις το ακέραιο μέρος.
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

το δοκίμασα δεν έπιασε... 1/10 πάλι
Άβαταρ μέλους
zaxeilasfc
Δημοσιεύσεις: 118
Εγγραφή: Δευ Οκτ 18, 2010 8:15 pm
Τοποθεσία: Macintosh HD

Re: Hellenico

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

Νίκο θα σε συμβούλευα να γράφεις πιο όμορφο κώδικα.. Με το που ξεκίνησα να τον διαβάζω τον παράτησα... Λογικά, όπως μας λες, το πρόβλημα είναι στην στρογγυλοποίηση.. δήλωσέ τον float ή double και μετα τον στρογγυλοποιείς μέσω setprecision (μορφοποίηση εξόδου, για c++) αναλόγως πως το χρειάζεται.
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

Το ξαναέγραψα από την αρχή , πάλι τα ίδια όμως...

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

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
 int x;
    int s[100];
    double t[100];
    int i(0);
    double sec(0.00);
    double sec1(0.00);
    int avband(0);
    void small()
    {
         double loop(10000.00);
         sec1 =0;
         for(int ti = 0; ti<x;)
         {
                 if(t[ti]<loop && t[ti]>0)
                 {
                               loop = t[ti];
                 }
                 ti++;
                 
         }
        if (loop == 10000.00){}
         else 
         sec1 =loop;
         
    }
    void newsec()
    {
         for(int uk =0; uk<x;)
         {
                 t[uk] = t[uk] -sec1;
                 uk++;
                 
         }
         
         
    }
    void bandw()
    {
         avband = 0;
      for (int xi = 0; xi<x;)
      {
          if(t[xi]<=0.00)
          {
                       avband=avband+ s[xi];
          }
          xi++;
      }     
         
         
    }
    void newspeed()
    {
         for (int u=0; u<x;)
         {
             if(t[u]>0.00)
             {
             t[u] = (t[u]*s[u])/(s[u] + avband);
             u = x;           
             }
             u++;
         }
    }
int main()
{

    ifstream in("downloads.in");
    in>>x;
    while(in>>s[i]>>t[i]){i++;}
    in.close();
    ofstream out("downloads.out");
    for (int k =0; k<x;)
    {
        small();
        sec = sec + sec1;
        newsec();
        bandw();
        newspeed();
        k++;
        
    }
out<<setprecision(2)<<sec<<endl;
out.close();
    return 0;
}
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

το setprecision(2) δν κάνει στρογγυλοποιησεί? στα testcase που ΄έκανα , έκανε γιαυτό..
pman
Δημοσιεύσεις: 419
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Hellenico

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

NikosZ έγραψε:το setprecision(2) δν κάνει στρογγυλοποιησεί? στα testcase που ΄έκανα , έκανε γιαυτό..
Όχι , δεν κάνει αυτό που θες.
http://www.cplusplus.com/reference/iost ... precision/

Αντί για
out<<setprecision(2)<<sec<<endl;

Δοκίμασε
out<<setprecision(2)<<roundf(sec)<<endl;

Η roundf περιέχεται στην <math.h>
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

ευχαριστώ για την συμβουλή αλλά αλλού είναι το πρόβλημα πάλι 1/10..
Άβαταρ μέλους
zaxeilasfc
Δημοσιεύσεις: 118
Εγγραφή: Δευ Οκτ 18, 2010 8:15 pm
Τοποθεσία: Macintosh HD

Re: Hellenico

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

sotiris έγραψε:
NikosZ έγραψε:το setprecision(2) δν κάνει στρογγυλοποιησεί? στα testcase που ΄έκανα , έκανε γιαυτό..
Όχι , δεν κάνει αυτό που θες.
http://www.cplusplus.com/reference/iost ... precision/

Αντί για
out<<setprecision(2)<<sec<<endl;

Δοκίμασε
out<<setprecision(2)<<roundf(sec)<<endl;

Η roundf περιέχεται στην <math.h>
@Sotiri εγώ χρησιμοποιώ "fout<<setprecision (0)<<fixed<<'μεταβλητή' και λειτουργεί κανονικά...

Νίκο δεν έχω την υπομονή να δω την λύση σου αλλά εγώ προσωπικά αλλιώς το έχω λύσει... καμία σχέση...
Spoiler: show
σκέψου λίγο structurs... :?:
Chapeiro
Δημοσιεύσεις: 7
Εγγραφή: Πέμ Δεκ 02, 2010 3:20 pm

Re: Hellenico

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

zaxeilasfc έγραψε:
Spoiler: show
σκέψου λίγο structurs... :?:
Spoiler: show
structures ??? :? δεν θα ήταν καλύτερο να σκεφτεί απλώς με τι ισούται η ταχύτητα και τι ψάχνει ? δεν μπορώ να φανταστώ κάποια λύση με δομές... θα μπορούσα να ρωτήσω τι έχεις στο μυαλό σου ?
@NikosZ +1 στο να γράφεις λίγο πιο όμορφο κώδικα και κυρίως με (σωστά) σχόλια όταν ζητάς βοήθεια σε forum
To err is human - and to blame it on a computer is even more so. R. Orben

Belief is the death of intelligence. R. A. Wilson

Genius always finds itself a century too early. R. W. Emerson
Άβαταρ μέλους
zaxeilasfc
Δημοσιεύσεις: 118
Εγγραφή: Δευ Οκτ 18, 2010 8:15 pm
Τοποθεσία: Macintosh HD

Re: Hellenico

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

Chapeiro έγραψε:
zaxeilasfc έγραψε:
Spoiler: show
σκέψου λίγο structurs... :?:
Spoiler: show
structures ??? :? δεν θα ήταν καλύτερο να σκεφτεί απλώς με τι ισούται η ταχύτητα και τι ψάχνει ? δεν μπορώ να φανταστώ κάποια λύση με δομές... θα μπορούσα να ρωτήσω τι έχεις στο μυαλό σου ?
@NikosZ +1 στο να γράφεις λίγο πιο όμορφο κώδικα και κυρίως με (σωστά) σχόλια όταν ζητάς βοήθεια σε forum
Δεν εννοώ κάτι το extreme. αν βοηθήσω παραπάνω δίνω ουσιαστικά την λύση (την δική μου τουλάχιστον) αν και αποδείχθηκε οτι λύνεται και με άλλο τρόπο.
Αυτό που έχω στο μυαλό μου σίγουρα είναι το τι ισουται η ταχύτητα. Το θέμα δεν είναι όμως να λύσεις το θέμα με δεδομένα τα 2 αρχεία αλλά των 1<=Ν<=100 αρχείων.
Με μια δομή, έστω download:

struct download
{
int taxitita;
int xronos;
float xronos1;
};

μπορείς κάλλιστα να αντιμετωπίσεις το πρόβλημα.

Φοβάμαι να γίνω σαφέστερος λόγο του οτι είμαστε σε δημόσια συζήτηση. Αν θέλεις κάτι παραπάνω στείλε μου μήνυμα.
EDIT: //Η δομή μπορεί να είναι παρόμοια. μη σκέφτεσε το όνομα των μεταβλητών. Σκεψου πως θα τις χρειαστείς και τι τις χρειάζεσαι.
Antrikkos576
Δημοσιεύσεις: 2
Εγγραφή: Τρί Νοέμ 08, 2011 7:46 pm

Re: Hellenico

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

Παιδιά είμαι στην ενότητα 1.2 στο πρόβλημα με την Ακρόπολη. Παίρνω 8/10 και δεν μπορώ να καταλάβω ποιο είναι το λάθος μου. Θα μπορούσε να με διαφωτίσει κάποιος παρακαλώ;

Ευχαριστώ!

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

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    int n,a,tmp=0,z=1,i,j,x,y;
    
    ifstream in ("acropolis.in");
    ofstream out ("acropolis.out");
    
    in>>n;
    int w[n];
    

    
    for (x=0;x<n;x++){
        in>>a;
        if ((a>=1)&&(a<=9000))
        w[x]=a;
        }
        
        for (i=0;i<n;i++){
            for (j=0;j<n-1;j++){
                while (w[j+z]==1)
            z+=1;
               if ((w[j+z]!=0)&&(w[j]!=1)&&(w[j]>w[j+z])){
               tmp=w[j];
               w[j]=w[j+z];
               w[j+z]=tmp;
               }
               z=1;
               }
               }
    
    for (y=0;y<n;y++){
        out<<w[y]<<"\n";
        }

    in.close();
    out.close();
    
    return 0;
}
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Όταν κάνεις τις πράξεις w[j+z] πιθανότατα να ξεφεύγεις από τα όρια του πίνακά σου.
Δοκίμασε να βάλεις πριν από κάθε τέτοια πράξη, μια if που να βεβαιώνει ότι ο πίνακας σου έχει αρκετές θέσεις ( if ( j+z < n ) ) και ξαναπές μας.
Πάντα να δηλώνεις τους πίνακες με λίγες παραπάνω θέσεις από ότι σε λέει το πρόβλημα, πχ w[n+10].

Άλλος τρόπος να λύσεις το πρόβλημα θα ήταν να βάλεις στην θέση w[n] ( που σε εσένα δεν υπάρχει, πρέπει να μεγαλώσεις τον πίνακα ) μια τεράστια τιμή ( πρακτικά σε αυτό το πρόβλημα, η τεράστια τιμή είναι 9001 ) ώστε να μη γίνει ποτέ η αντιμετάθεση με αυτή την τιμή, αλλά και το j+z σου να μη φτάνει ποτέ σε τιμές μεγαλύτερες του n, άρα θα περίττευαν και οι if.

Αν χρειαστείς βοήθεια στείλε pm.
Λύσεις θεμάτων ΠΔΠ: 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/
Antrikkos576
Δημοσιεύσεις: 2
Εγγραφή: Τρί Νοέμ 08, 2011 7:46 pm

Re: Hellenico

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

Ευχαριστώ πολύ. Αυτό ήταν το λάθος. Όταν έβαλα ( if ( j+z < n ) ) πήρα 10/10! :D :D
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Hellenico

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

Άντε, καλή συνέχεια αγόρι.

Κράτα ως καλή συνήθεια να βάζεις και μερικές άδειες θέσεις στο τέλος του πίνακα για να μην έχεις τέτοια προβλήματα.
Λύσεις θεμάτων ΠΔΠ: 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/
userresu
Δημοσιεύσεις: 191
Εγγραφή: Τρί Δεκ 16, 2008 9:53 pm

Re: Hellenico

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

ΟΚ, διορθώθηκε η εκφώνηση, thanks.
Memas
Δημοσιεύσεις: 87
Εγγραφή: Παρ Δεκ 31, 2010 4:13 pm
Επικοινωνία:

Re: Hellenico

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

Βασικά με τον ίδιο λογαριασμό που σου δόθηκε στο Pdp πρέπει να συνδεθείς και στο Hellenico για να κάνεις την υποβολή σου, και όσον αφορά τα Linux και την gpc-Pascal δεν παίζει ρόλο το λειτουργικό 99% είναι ίδια με την free-pascal που χρησιμοποιούσα και στα Windows... Υ.γ. είμαστε σε λάθος topic :lol:
pman
Δημοσιεύσεις: 419
Εγγραφή: Τρί Φεβ 10, 2009 9:49 pm

Re: Hellenico

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

Γίνεται να φτιαχτεί υποσελίδα στο http://www.hellenico.gr/ που να περιέχει όλα τα παλιότερα θέματα του ΠΔΠ; ( και να μπορούμε κατόπιν να κάνουμε και υποβολή λύσεων )
NikosZ
Δημοσιεύσεις: 10
Εγγραφή: Σάβ Οκτ 08, 2011 11:23 am

Re: Hellenico

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

Παιδιά στο πρώτο 1,3 στο PC βγάζει σωστό outpout κι εκεί βγάζει λάθος WTF is going on?
Άβαταρ μέλους
mariosal
Δημοσιεύσεις: 63
Εγγραφή: Σάβ Μαρ 20, 2010 12:00 am
Τοποθεσία: Χολαργός, Ελλάδα
Επικοινωνία:

Re: Hellenico

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

NikosZ έγραψε:Παιδιά στο πρώτο 1,3 στο PC βγάζει σωστό outpout κι εκεί βγάζει λάθος WTF is going on?
Το πιθανότατο πάντα είναι ότι ο χρήστης έχει το πρόβλημα και όχι το σύστημα υποβολών. Επίσης βλέποντας ότι το boat έχει λυθεί από 75 άτομα μπορείς να βεβαιωθείς.

Έπειτα είναι αδύνατο να σε βοηθήσει κάποιος μυρίζοντας τα νύχια του. Πρέπει να ορίσεις ακριβώς το πρόβλημά σου ή να στείλεις κομμάτι του κώδικα.

Όταν κολλάς κάπου καλό θα ήταν να μη τρελαίνεις το forum. Κάνε και τον κόπο να διαβάσεις αυτό το κείμενο. http://www.catb.org/~esr/faqs/smart-questions.html
Spoiler: show
Μπορείς να δεις εδώ τις λύσεις μου αν πιστεύεις ότι είσαι τόσο απελπισμένος. https://github.com/mariosal/algo/tree/master/hellenico
Απάντηση