Σελίδα 8 από 14

Re: Hellenico

Δημοσιεύτηκε: Σάβ Οκτ 08, 2011 5:46 pm
από NikosZ
δλδ να μετατρέπω την είσοδο σε double κι στο τέλος να το ξανακάνω int?

Re: Hellenico

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

Re: Hellenico

Δημοσιεύτηκε: Σάβ Οκτ 08, 2011 9:04 pm
από NikosZ
το δοκίμασα δεν έπιασε... 1/10 πάλι

Re: Hellenico

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

Re: Hellenico

Δημοσιεύτηκε: Κυρ Οκτ 09, 2011 3:06 pm
από 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;
}

Re: Hellenico

Δημοσιεύτηκε: Κυρ Οκτ 09, 2011 8:10 pm
από NikosZ
το setprecision(2) δν κάνει στρογγυλοποιησεί? στα testcase που ΄έκανα , έκανε γιαυτό..

Re: Hellenico

Δημοσιεύτηκε: Κυρ Οκτ 09, 2011 8:21 pm
από 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>

Re: Hellenico

Δημοσιεύτηκε: Κυρ Οκτ 09, 2011 8:28 pm
από NikosZ
ευχαριστώ για την συμβουλή αλλά αλλού είναι το πρόβλημα πάλι 1/10..

Re: Hellenico

Δημοσιεύτηκε: Κυρ Οκτ 09, 2011 9:56 pm
από 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... :?:

Re: Hellenico

Δημοσιεύτηκε: Πέμ Οκτ 13, 2011 1:25 am
από Chapeiro
zaxeilasfc έγραψε:
Spoiler: show
σκέψου λίγο structurs... :?:
Spoiler: show
structures ??? :? δεν θα ήταν καλύτερο να σκεφτεί απλώς με τι ισούται η ταχύτητα και τι ψάχνει ? δεν μπορώ να φανταστώ κάποια λύση με δομές... θα μπορούσα να ρωτήσω τι έχεις στο μυαλό σου ?
@NikosZ +1 στο να γράφεις λίγο πιο όμορφο κώδικα και κυρίως με (σωστά) σχόλια όταν ζητάς βοήθεια σε forum

Re: Hellenico

Δημοσιεύτηκε: Δευ Οκτ 17, 2011 11:58 pm
από 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: //Η δομή μπορεί να είναι παρόμοια. μη σκέφτεσε το όνομα των μεταβλητών. Σκεψου πως θα τις χρειαστείς και τι τις χρειάζεσαι.

Re: Hellenico

Δημοσιεύτηκε: Τρί Νοέμ 08, 2011 7:56 pm
από 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;
}

Re: Hellenico

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

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

Αν χρειαστείς βοήθεια στείλε pm.

Re: Hellenico

Δημοσιεύτηκε: Τετ Νοέμ 09, 2011 4:39 pm
από Antrikkos576
Ευχαριστώ πολύ. Αυτό ήταν το λάθος. Όταν έβαλα ( if ( j+z < n ) ) πήρα 10/10! :D :D

Re: Hellenico

Δημοσιεύτηκε: Τετ Νοέμ 09, 2011 5:38 pm
από Κηπουρίδης
Άντε, καλή συνέχεια αγόρι.

Κράτα ως καλή συνήθεια να βάζεις και μερικές άδειες θέσεις στο τέλος του πίνακα για να μην έχεις τέτοια προβλήματα.

Re: Hellenico

Δημοσιεύτηκε: Τρί Δεκ 27, 2011 6:35 pm
από userresu
ΟΚ, διορθώθηκε η εκφώνηση, thanks.

Re: Hellenico

Δημοσιεύτηκε: Πέμ Δεκ 29, 2011 6:48 pm
από Memas
Βασικά με τον ίδιο λογαριασμό που σου δόθηκε στο Pdp πρέπει να συνδεθείς και στο Hellenico για να κάνεις την υποβολή σου, και όσον αφορά τα Linux και την gpc-Pascal δεν παίζει ρόλο το λειτουργικό 99% είναι ίδια με την free-pascal που χρησιμοποιούσα και στα Windows... Υ.γ. είμαστε σε λάθος topic :lol:

Re: Hellenico

Δημοσιεύτηκε: Τρί Ιαν 17, 2012 2:17 pm
από sotiris
Γίνεται να φτιαχτεί υποσελίδα στο http://www.hellenico.gr/ που να περιέχει όλα τα παλιότερα θέματα του ΠΔΠ; ( και να μπορούμε κατόπιν να κάνουμε και υποβολή λύσεων )

Re: Hellenico

Δημοσιεύτηκε: Κυρ Μαρ 18, 2012 11:47 am
από NikosZ
Παιδιά στο πρώτο 1,3 στο PC βγάζει σωστό outpout κι εκεί βγάζει λάθος WTF is going on?

Re: Hellenico

Δημοσιεύτηκε: Κυρ Μαρ 18, 2012 5:48 pm
από 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