Πρόβλημα 1: Ανάστροφος Αραιού Πίνακα (20 Μονάδες) Πίνακας m επί n διαστάσεων είναι μια ορθογώνια διάταξη με m γραμμές και n στήλες. Για παράδειγμα, ο πίνακας είναι διαστάσεων 4 επί 3 και αποτελείται από ακέραιους αριθμούς. Η i οστή γραμμή και j οστή στήλη ενός πίνακα A αναφέρεται ως a ij. Για παράδειγμα, a 23 = 1. Ο ανάστροφος ενός πίνακα M, συμβολίζεται M T, προκύπτει μετατρέποντας τις γραμμές σε στήλες και τις στήλες σε γραμμές. Δηλαδή, το ij οστό στοιχείο του M T είναι το ji οστό στοιχείο του M. Για παράδειγμα, ο ανάστροφος του πιο πάνω πίνακα A είναι: Ένας πίνακας ονομάζεται αραιός όταν τα μη μηδενικά στοιχεία του πίνακα είναι σχετικά λίγα. Καθώς ένας m επί n πίνακας έχει mn πλήθος στοιχείων, η αποθήκευση ενός αραιού πίνακα μεγάλων διαστάσεων, θα περιείχε και πολλά μηδενικά στοιχεία. Ως εκ τούτου, η πρακτική που επικρατεί για την αναπαράσταση αραιών πινάκων είναι να αποθηκεύονται μόνο τα μη μηδενικά στοιχεία του πίνακα μαζί με τη γραμμή και τη στήλη στην οποία εμφανίζονται. Να γραφεί πρόγραμμα που να επιστρέφει στην έξοδο τον ανάστροφο ενός αραιού πίνακα ακέραιων αριθμών. Είσοδος Η πρώτη γραμμή εισόδου αποτελείται από δύο θετικούς ακέραιους αριθμούς, and που αντιπροσωπεύουν τις διαστάσεις του πίνακα εισόδου. Ακολουθούν, σύνολα αριθμών, ένα για κάθε γραμμή του πίνακα εισόδου. Κάθε σύνολο αποτελείται από δύο γραμμές που αντιπροσωπεύουν τα μη μηδενικά στοιχεία μιας γραμμής του πίνακα εισόδου. Η πρώτη γραμμή κάθε συνόλου ξεκινά με τον αριθμό r των μη μηδενικών στοιχείων και ακολούθως τις r στήλες στις οποίες υπάρχουν μη μηδενικά στοιχεία, σε αύξουσα σειρά; η δεύτερη γραμμή περιέχει r ακέραιους αριθμούς που αποτελούν τα στοιχεία της γραμμής του πίνακα εισόδου. Για παράδειγμα, ο πιο πάνω πίνακας A θα είχε την ακόλουθη αναπαράσταση:
4 3 1 3 2 2 2 3 4-1 0 5-2 11 Σημειώνεται ότι για γραμμή του πίνακα εισόδου όλο μηδενικό στοιχεία, το αντίστοιχο σύνολο θα είναι μόνο ο αριθμός `0', στην πρώτη γραμμή, ακολουθούμενος από μια κενή γραμμή. Παραδοχές: οι διαστάσεις του αραιού πίνακα δεν θα υπερβαίνουν το 10000 επί 10000, ο αριθμός των μη μηδενικών στοιχείων δεν είναι μεγαλύτερος από 1000, κάθε στοιχείο του πίνακα εισόδου θα είναι ακέραιος αριθμός από 10000 εώς 10000, και κάθε γραμμή δεν θα περιέχει περισσότερους από 79 χαρακτήρες. Έξοδος Το πρόγραμμα επιστρέφει τον ανάστροφο του πίνακα εισόδου, στην ίδια αναπαράσταση. Παράδειγμα Εισόδου 4 3 1 3 2 2 2 3 4-1 0 5-2 11 Παράδειγμα Εξόδου 3 4 2 1 4 1 5 3 1 2 4 3 4-2 3 1 2 4 2-1 11
Problem 1: Sparse Matrix Transpose (20 Marks) A matrix is a rectangular array of elements, most commonly numbers. A matrix with m rows and n columns is said to be an m by n matrix. For example, is a 4 by 3 matrix of integers. The individual elements of a matrix are usually given lowercase symbols and are distinguished by subscripts. The ith row and jth column of matrix A is usually referred to as a ij. For example, a 23 = 1. The transpose of a matrix M, denoted M T, is formed by interchanging the rows and columns of M. That is, the ijth element of M T is the jith element of M. For example, the transpose of matrix A above is: A matrix is said to be sparse if there are relatively few non zero elements. As a m by n matrix has mn number of elements, storing all elements of a large sparse matrix may be inefficient as there would be many zeroes. There are a number of ways to represent sparse matrices, but essentially they are all the same: store only the nonzero elements of the matrix along with their row and column. You are to write a program to output the transpose of a sparse matrix of integers. Input You are given several sparse matrix in a row, each of them described as follows. The first line of the input corresponds to the dimension of the matrix, m and n (which are the number of rows and columns, respectively, of the matrix). You are then given m sets of numbers, which represent the rows of the matrix. Each set consists of two lines which represents a row of the matrix. The first line of a set starts with the number r, which is the number of non zero elements in that row, followed by r numbers which correspond to the column indices of the non zero elements in that row, in ascending order; the second line has r integers which are the matrix elements of that row. For example, matrix A above would have the following representation: 4 3 1 3 2 2 2 3
4-1 0 5-2 11 Note that for a row with all zero elements, the corresponding set would just be one number, `0', in the first line, followed by a blank line. You may assume: the dimension of the sparse matrix would not exceed 10000 by 10000, the number of non zero element would be no more than 1000, Output each element of the matrix would be in the range of 10000 to 10000, and each line has no more than 79 characters. For each input case, the transpose of the given matrix in the same representation. Sample Input 4 3 1 3 2 2 2 3 4-1 0 5-2 11 Sample Output 3 4 2 1 4 1 5 3 1 2 4 3 4-2 3 1 2 4 2-1 11
Πρόβλημα 2: Ενοικιάσεις Κανό (30 Μονάδες) Σε ένα ρυάκι υπάρχουν n εμπορικοί σταθμοί που αριθμούνται από 1 έως n. Σε κάθε σταθμό i μπορείς να ενοικιάσεις κανό το οποίο είναι δυνατό να επιστραφεί σε οποιοδήποτε άλλο σταθμό j > i. Ζητείται να γραφεί πρόγραμμα το οποίο δέχεται ως είσοδο ένα πίνακα C(i, j) που αντιπροσωπεύει το κόστος ενοικιάσεως από τον σταθμό i έως το σταθμό j ( για κάθε 1 i, j n) και επιστρέφει τη πιο φθηνή διαδρομή ενοικιάσεων από το σταθμό 1 έως το σταθμό n. Μπορείτε να υποθέσετε ότι C(i,i)=0, και ότι δεν επιτρέπεται να πάτε αντίθετα στο ρεύμα. Για παράδειγμα, για n=4 και πίνακα εισόδου: Η πιο φθηνή διαδρομή είναι ενοικίαση κανό από το σταθμό 1 έως το σταθμό 3, κι έπειτα από το σταθμό 3 έως το σταθμό 4 για συνολικό κόστος 5. Είσοδος Η πρώτη γραμμή εισόδου αποτελείται από ένα θετικό ακέραιο αριθμό n που αντιπροσωπεύει τον αριθμο των σταθμών. Οι επόμενες n γραμμές αποτελούνται από n ακέραιους αριθμούς η κάθε μια, οι οποίοι διαχωρίζονται με κενό διάστημα και έχουν τιμές μικρότερες από 1000. Έξοδος Το πρόγραμμα πρέπει να επιστρέφει δύο γραμμές εξόδου. Η πρώτη γραμμή εξόδου θα πρέπει να αποτελείται από ένα θετικό ακέραιο αριθμό m που αντιπροσωπεύει τον αριθμό των ενοικιάσεων της πιο φθηνής διαδρομής. Η δεύτερη γραμμή θα πρέπει να αποτελείται από m+1 ακέραιους αριθμούς που υποδηλώνουν τους σταθμούς της πιο φθηνής διαδρομής από τον σταθμό 1 έως το σταθμό n.
Παράδειγμα Εισόδου 4 0 2 3 7 0 0 2 4 0 0 0 2 0 0 0 0 Παράδειγμα Εξόδου 3 1 3 4 ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ
Problem 2: Canoe Rental (30 Marks) There are n trading posts numbered 1 to n as you travel downstream. At any trading post I you can rent a canoe to be returned at any of the downstream trading post j > I. You are given a cost array C(i,j) giving the cost of these rental for all 1 i, j n. We can assume that C(i,i)=0, and that you can't go upriver. For example, one cost array with n=4 might be the following: Write a program that finds the cheapest sequence of rentals taking you from post 1 all the way down to post n. In this example, the cheapest way is to rent canoes from post 1 to post 3, and then from post 3 to post 4 for a total cost of 5. Input The first line of input consists of a positive integer n indicating the number of trading posts. The subsequent n lines contain n positive integers each, separated by space and having values less than 1000. Output There should be two lines of output. The first line indicates the number of trading posts in the cheapest sequence of rentals. The second line indicates the trading posts at which the rentals occur in the cheapest sequence. Sample Input 4 0 2 3 7 0 0 2 4 0 0 0 2 0 0 0 0 Sample Output 3 1 3 4
Πρόβλημα 3: Μεγαλύτερος Πρώτος Αριθμός (50 Μονάδες) Με ένα πίνακα 5x5, που δίνεται από το αρχείο κειμένου "input.txt". Ο ρόλος σας είναι να παίξετε το " ενώστε τους αριθμούς" χρησιμοποιόντας τον πίνακα και να βρείτε τον μέγιστο πρώτο αριθμό σε αυτό το τετράγωνο. Το πρόγραμμα διαβάζει το αρχείο εισόδο και επιστρέφει ως έξοδο τον μέγιστο πρώτο αριθμό που υπάρχει στον πίνακα. Ο πρώτος αριθμός πρέπει να είναι μικρότερος από έχει μήκος μέχρι 9 ψηφία. Έγκυροι αριθμοί από τον πίνακα: 10^9 (1,000,000,000), δηλαδή μπορεί να α) μπορείτε να ξεκινήσετε απο οποιαδήποτε από τις 25 κυψελίδες του πίνακα β) τα συνεχόμενα ψηφία μπορούν να επιλεγούν μετακινούμενοι οριζόντια, κάθετα ή διαγώνια από την προηγούμενη κυψελίδα γ) ΔΕΝ μπορείτε να παραμείνετε στην ίδια κυψελίδα και να την χρησιμοποιήσετε δύο φορές συνεχόμενες δ) οι γραμμές και οι στήλες στα άκρα του πίνακα ΔΕΝ είναι ενωμένα αναμεταξύ του. ΔΕΝ μπορείτε να μετακινηθείτε από την γραμμή 1 στην γραμμή 5 με μία κίνηση ε) μπορείτε να επαναχρησιμοποιήσετε οποιαδήποτε κυψελίδα αρκεί η μετακίνηση προς αυτό να πληρεί του πιο πάνω κανονισμούς Είσοδος Για το πίνακα εισόδου ( πλέγμα): α) το αρχείο εισόδου θα περιέχει 5 γραμμές β) κάθε γραμμή θα περιέχει 5 ψηφία (0 9) χωρισμένα με το κενό γ) οποιοδήποτε ψηφίο μπορεί να εμφανιστεί σε οποιαδήποτε από τις 25 κυψελίδες δ) θα υπάρχει τουλάχιστον ένα μη μηδενικό ψηφίο ε) θα υπάρχει τουλάχιστον ένας πρώτος αριθμός στο πλέγμα Έξοδος Για την έξοδο: α) ο αριθμός πρέπει να είναι πρώτος β) ο αριθμός πρέπει να έχει 9 ή λιγότερα ψηφία γ) το πρώτο ψηφίο δεν πρέπει να είναι μηδέν
δ) ο αριθμός πρέπει να είναι προερχόμενος από το πλέγμα χρησιμοποιόντας τους πιο πάνω κανόνες Παράδειγμα Εισόδου 1 9 4 0 3 7 5 8 3 3 0 0 0 7 9 0 0 0 0 0 9 0 0 1 1 Παράδειγμα Εξόδου 989898989 Παρατηρήστε ότι αυτή είναι η καλύτερη απάντηση αλλά μερικοί άλλοι έγκυροι πρώτοι αριθμοί που βρίσκονται στο παράδειγμα είναι: 989854919 943485497 900000011 1940339 37
Problem 3: Biggest Prime (50 Marks) Given a 5x5 matrix, from file "input.txt". Your task is to play "connect the digits" using that matrix and find the maximum prime number in that square. Your program will read in the file, and then print a single number as the output of the program... namely the largest prime number you could find in the grid contained in the input file. The prime number must be less than 10^9 (1,000,000,000), meaning it may be up to 9 digits long. Valid numbers from the grid: a) you may start at any of the 25 grid positions b) subsequent digits may be chosen by moving horizontally, vertically, or diagonally from the previous position in the grid c) you may NOT "stay" on a grid position and use the same grid position twice in a row d) the columns and rows at the edge of the matrix are NOT connected. You may NOT move from row 1 to row 5 with one move. e) you may reuse grid positions provided that the above rules are followed in order to return to that position. Input About the input grid: a) The input file will contain 5 lines b) each line will contain 5 digits (0 9) separated by spaces c) any digit may appear in any of the 25 grid positions d) there will be at least one non zero digit e) there will be at least one prime number contained in the grid Output About the program output: a) the number must be a prime number b) the number must have 9 or fewer digits c) the leading digit should not be zero d) the number must be obtainable from the grid using the rules above Sample Input 1 9 4 0 3 7 5 8 3 3 0 0 0 7 9 0 0 0 0 0 9 0 0 1 1 Sample Output 989898989 Notice that this is the best answer but some other legal primes found in this example are: 989854919 943485497 900000011 1940339 and 37