ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Σχετικά έγγραφα
ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Οι παρακάτω λύσεις είναι απολύτως ενδεικτικές

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ GREEK COMPUTER SOCIETY

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI Org. GREEK COMPUTER SOCIETY MEMBER OF IFIP, IOI Org.

ΠΡΟΤΥΠΑ. ΠΑΡΑ ΕΙΓΜΑ ηµιουργία πρότυπου στοίβας (stack) και στη συνέχεια δηµιουργία µιας στοίβας σηµείων.

ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ ΠΡΟΒΛΗΜΑΤΟΣ Β ΦΑΣΗΣ

ΘΕΜΑ Α ΦΑΣΗΣ. Υπολογιστικά Νέφη Ενδεικτικές Απαντήσεις

Χωρική Βάση δεδοµένων Autocad

Δομές Δεδομένων και Αλγόριθμοι (Γ εξάμηνο) Τμήμα Μηχανικών Πληροφορικής ΤΕ, ΤΕΙ Ηπείρου. Άσκηση εργαστηρίου #6 (Υλοποίηση δυαδικού δένδρου αναζήτησης)

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Ι. Κλάσεις και Αντικείμενα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Μάθημα 21: Ουρές (Queues)

Αρχεία & Ρεύματα ΑΡΧΕΙΑ & ΡΕΥΜΑΤΑ. Γεώργιος Παπαϊωάννου ( ) gepap@aueb.gr

Φροντιςτήριο. Linked-List

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Constructors, Destructors, Pointers IO Streams, File Streams

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Δισδιάστατοι Πίνακες (2D Arrays) Εισαγωγή στη C++

Οντοκεντρικός Προγραμματισμός

Οντοκεντρικός Προγραμματισμός

HY150a Φροντιστήριο 3 24/11/2017

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα προηγούμενα ακαδημαϊκά έτη: ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Συναρτήσεις (Functions) Εισαγωγή στη C++

Προγραμματισμός Ι. Πίνακες, Δείκτες, Αναφορές και Δυναμική Μνήμη. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εισαγωγή στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Υπολογιστών με C++

17TimeThis.h function returns reference pointer to same object { return *this; }

2 η Διάλεξη C++ Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Προγραμματιστικές Τεχνικές

Οντοκεντρικός Προγραμματισμός

Δομές Επανάληψης. Εισαγωγή στη C++

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Δομές δεδομένων (Structures) Εισαγωγή στη C++

Υπολογιστικά Mαθηματικά II

Αναφορές, είκτες και Αλφαριθμητικά

Πίνακες (Arrays) Εισαγωγή στη C++

Δομές Δεδομένων και Αλγόριθμοι

24ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

Συμβολοσειρές ΣΥΜΒΟΛΟΣΕΙΡΕΣ. Γεώργιος Παπαϊωάννου ( )

Υπολογιστικά Mαθηματικά II

Προγραμματισμός Ι. Εισαγωγή στην C++ Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Ονοματεπώνυμο και ΑΜ: Είχα παραδώσει εργασίες τα εξής ακαδημαϊκά έτη: Διάρκεια: 2,5 ώρες, κλειστά βιβλία και σημειώσεις ΚΑΛΗ ΕΠΙΤΥΧΙΑ!

Aντικειμενοστραφής. Προγραμματισμός. Κληρονομικότητα

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Συναρτήσεις II Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Το πρόγραμμα θα τυπώνει και τους τρεις πίνακες.

Υπερφόρτωση τελεστών (operator(

a-shapes στη βιολογία

C: Από τη Θεωρία στην Εφαρμογή

Εργαστήριο 2: Πίνακες

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Ειδικά Θέματα Ι. Σήμερα!

Μεταφραστής (Compiler)

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

Παίρνοντας Αποφάσεις 1

Ευρετική αναζήτηση (πληροφορημένη αναζήτηση)

Δομές Δεδομένων & Αλγόριθμοι

ΘΕΜΑΤΑ ΤΕΛΙΚΗΣ ΦΑΣΗΣ

Προγραμματισμός Υπολογιστών με C++

Στοιχειώδης προγραμματισμός σε C++

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Εντολές for, while, do-while Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

ΣΤΟΙΧΕΙΑ ΤΗΣ ΓΛΩΣΣΑΣ C++ Πέρασμα παραμέτρων, συναρτήσεις δόμησης και αποδόμησης

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #5

Περιεχόμενα: Prj05.1 Το Πρόβλημα Prj05.2 Παίρνοντας Ιδέες από την Pascal Prj05.3 Η Κλάση και οι Μέθοδοι Prj05.3.

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

Προγραμματισμός Υπολογιστών με C++

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

test.txt #include <iostream> #include <fstream> int main()

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Ι (HY120)

Τεχνολογίες Υλοποίησης Αλγορίθµων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΑΣΚΗΣΗ #5 Προτεινόμενη Λύση

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι είναι οι πίνακες; Μονοδιάστατοι πίνακες. Απλές μεταβλητές: Κεντρική μνήμη

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 1

Γλώσσα Προγραμματισμού C

Συµβολοσειρές - Strings

Συναρτήσεις και Πίνακες

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

POINTERS, AGGREGATION, COMPOSITION

Εισαγωγή στην πληροφορική

Εισαγωγή στην πληροφορική

Πληροφορική 2. Γλώσσες Προγραμματισμού

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

Αναζήτηση χωρίς πληροφόρηση

Δομημένος Προγραμματισμός (ΤΛ1006)

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ Α.Π.Θ. ΕΡΓΑΣΤΗΡΙΟ C++ ΕΞΑΜΗΝΟ Γ Ακαδηµαϊκό Έτος

Μονοδιάστατοι πίνακες

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ GREEK COMPUTER SOCIETY

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

Εισαγωγή στον Προγραμματισμό

Transcript:

22 ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Θέμα 1o: Lines man CPP ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Κωστάλα Ερριέτα 12 ο ΓΕΛ Πειραιώς [25 Μονάδες] /* USER: 22pdp19 LANG: C++ TASK: lines_man */ #include <fstream> #include <vector> // #include <math.h> using namespace std; int abs (int n) return (n >= 0?n:n * -1); int main() ifstream in("lines_man.in"); ofstream out("lines_man.out"); int A; //court size in >> A; int M; //phases in >> M; // vector <int> width; int firstdude = 0, seconddude = 0; int firstdudepos = A / 2, seconddudepos = A / 2; for (int i = 0; i < M; i++) int x; in >> x; if (x <= firstdudepos x >= firstdudepos && x <= A/2) firstdude += abs(firstdudepos - x); firstdudepos = x; else firstdude += abs (firstdudepos - A/2); firstdudepos = A/2; if (x >= seconddudepos x <= seconddudepos && x >= A/2) seconddude += abs(seconddudepos - x); seconddudepos = x; else Σελ. 1 από 8

A/2); seconddude += abs (seconddudepos - seconddudepos = A/2; out << firstdude << " " << seconddude << endl; return 0; Σελ. 2 από 8

ΘΕΜΑ 2ο: Servers CPP Πόριος Χρήστος 3 ο Γ/σιο Αλεξανδρούπολης (28.6/35) /* USER: 22pdp33 LANG: C++ TASK: servers, */ #include <fstream> #include <iostream> #include <stdlib.h> using namespace std; struct site int id; long int hits; ; [35 Μονάδες] int compare(const void *a, const void *b) site sa; site sb; sa = *(site*)a; sb = *(site*)b; return sb.hits-sa.hits; int main() ifstream fin("servers.in"); ofstream fout("servers.out"); int M, N, K, i, s, j; long int h; site sites[10000]; Σελ. 3 από 8 fin >> M >> N >> K; for(i=0;i<m;i++) sites[i].id=i; sites[i].hits=0; for(i=0;i<m;i++)

for(j=0;j<n;j++) fin >> s >> h; //cout << s << ' ' << h; sites[s].hits+=h; //cout << ' ' << sites[s].id << ' ' << sites[s].hits << endl; qsort(sites,m,sizeof(site),compare); for(i=0;i<k;i++) fout << sites[i].id << ' ' << sites[i].hits << '\n'; //cout << sites[i].id << ' ' << sites[i].hits << endl; fin.close(); fout.close(); return 0; Σελ. 4 από 8

ΘΕΜΑ 3o: Get out! CPP Αρσένης Γεράσιμος 2 ο ΓΕΛ Μοσχάτου /* USER: 22pdp91 LANG: C++ TASK: getout */ #include <cstdio> #include <set> #include <queue> #include <cstdlib> [40 Μονάδες] using namespace std; int n, r; FILE *fin, *fout; struct state char park[9][9]; int moves; bool operator==(const state &b) const int i, j; for (i=1; i<=n; i++) for (j=1; j<=n; j++) if (park[i][j]! =b.park[i][j]) return false; return true; bool operator<(const state &b) const int i, j; for (i=1; i<=n; i++) for (j=1; j<=n; j++) if (park[i][j]<b.park[i][j]) return true; else if (park[i][j]>b.park[i][j]) return false; return false; void operator=(const state &b) int i, j; for (i=1; i<=n; i++) for (j=1; j<=n; j++) park[i][j] = b.park[i][j]; moves = b.moves; ; set<state> s; queue<state> q; char dir[4][2] = -1, 0, 1, 0, 0, -1, 0, 1 ; void print(state &tmp) for (int i=n; i>=1; i--) for (int j=1; j<=n; j++) printf("%d ", tmp.park[i][j]); Σελ. 5 από 8

printf("\n"); printf("\n"); void check(state &tmp) int i; //print(tmp); for (i=1; i<=n; i++) if (tmp.park[r][i]!=0) return; fprintf(fout, "%d\n", tmp.moves); exit(0); //printf("ok with %d moves\n", tmp.moves); //if (tmp.moves==4) print(tmp); int main() fin=fopen("getout.in", "r"); fout=fopen("getout.out", "w"); state init, tmp, buk; int d=1, i,j, t, x, y, k, z; fscanf(fin, "%d %d", &n, &r); for (i=1; i<=n; i++) for (j=1; j<=n; j++) init.park[i][j] = 0; for (i=1; i<=n; i++) fscanf(fin, "%d", &t); if (i==r && t!=0) fprintf(fout, "-1\n"); return 0; for (j=1; j<=t; j++) fscanf(fin, "%d", &y); init.park[i][y] = d; init.park[i][y+1] = d++; for (i=1; i<=n; i++) fscanf(fin, "%d", &t); for (j=1; j<=t; j++) fscanf(fin, "%d", &x); init.park[x][i] = d; init.park[x+1][i] = d++; init.moves = 0; s.insert(init); q.push(init); check(init); while (!q.empty()) char used[100]=0; tmp = q.front(); q.pop(); //print(tmp); Σελ. 6 από 8 tmp.moves++; buk = tmp; for (i=1; i<=n; i++)

for (j=1; j<=n; j++) if (tmp.park[i][j]) for (k=0; k<4; k++) x = i + dir[k][0]; y = j + dir[k] [1]; if (i>=1 && i<=n && j>=1 && j<=n && tmp.park[i][j]==tmp.park[x][y] &&!used[tmp.park[i][j]]) break; if (k!=4) used[tmp.park[i][j]] = 1; //printf("found (%d %d) (%d %d): %d \n", i, j, x, y, tmp.park[i][j]); if (i==x) //if (j<y) k = j; else k = y; k = j; for (z=k-1; z>=1; z--) if (!tmp.park[i][z]) tmp.park[i][z] = tmp.park[i][z+1]; tmp.park[i][z+2] = 0; else break; if (s.find(tmp)==s.end()) q.push(tmp); s.insert(tmp); check(tmp); tmp = buk; for (z=k+2; z<=n; z++) if (!tmp.park[i][z]) tmp.park[i][z] = tmp.park[i][z-2]; tmp.park[i][z-2] = 0; else break; if (s.find(tmp)==s.end()) q.push(tmp); s.insert(tmp); check(tmp); tmp = buk; else //if (i<x) k = i; else k = x; k = i; //printf("second\n"); //print(tmp); for (z=k-1; z>=1; z--) if (!tmp.park[z][j]) //printf("ok\n"); tmp.park[z][j] = tmp.park[z+1][j]; tmp.park[z+2][j] = 0; else break; if (s.find(tmp)==s.end()) q.push(tmp); s.insert(tmp); check(tmp); tmp = buk; for (z=k+2; z<=n; z++) Σελ. 7 από 8

if (!tmp.park[z][j]) tmp.park[z][j] = tmp.park[z-2][j]; tmp.park[z-2][j] = 0; else break; if (s.find(tmp)==s.end()) q.push(tmp); s.insert(tmp); check(tmp); tmp = buk; //return 0; fprintf(fout, "-1\n"); return 0; Σελ. 8 από 8