Anagramma (anagr)
Descrizione del problema
Una stringa di caratteri S1 si dice anagramma di un'altra stringa S2 se la prima può essere ottenuta dalla seconda permutandone i caratteri. Per
esempio, MORA è un anagramma diROMA mentre MARA non lo è (in quanto i
caratteri sono diversi).
Scrivere un programma che riceve due stringhe S1 e S2 e determina se S1 è un anagramma diS2.
Dati di input
Il file input.txt è composto da due righe. La prima riga contiene la
stringa S1 e la seconda contiene la stringa S2. Entrambe le stringhe sono
sequenze non vuote, costituite da lettere dell'alfabeto anglosassone codificate in codice ASCII, e la loro lunghezza massima è di 100 caratteri.
Dati di output
Il file output.txt contiene una sola riga: la parola SI se S1 è un anagramma
di S2, oppure la parola NO in caso contrario.
Esempi di input/output
File input.txt File output.txt
ABAA
ABBA
NO
File input.txt File output.txt
ABBA
BABA
SI
Autore/i
A.S. Stankevich, ACM ICPC Team, St. Petersburg State University of Information
Technology, Mechanics and Optics
Antipalindroma (anpal)
Descrizione del problema
Una stringa di caratteri si dice palindroma se risulta identica sia che venga
letta da sinistra a destra sia che venga letta da destra a sinistra. Per
esempio, acca è una stringa palindroma.
Una sottostringa è una sequenza di caratteri consecutivi scelti dalla stringa
data. Per esempio, ac è una sottostringa di acca mentre aca non lo è perché
un carattere viene saltato in essa.
Scrivere un programma che riceve una stringa S palindroma in ingresso, e restituisce la sottostringa di S di massima lunghezza che non sia palindroma.
In caso di più sottostringhe di pari lunghezza massima che soddisfano i requisiti sopra, il programma deve restituire quella che appare più a sinistra.
Dati di input
Il file input.txt è composto da una sola riga contenente la stringa S fornita in
ingresso. Tale stringa è una sequenza non vuota, costituita dalle lettere dell'alfabeto codificate in ASCII, e la sua massima lunghezza è di 100 caratteri.
Dati di output
Il file output.txt è formato da una sola riga contenente la sottostringa di S di
massima lunghezza non palindroma. Se tutte le sottostringhe non vuote
di S sono palindrome, il file deve contenere l'indicazione NO SOLUZIONI.
Esempi di input/output
File input.txt File output.txt
abba abb
Autore/i
A.S. Stankevich, ACM ICPC Team, St. Petersburg State University of Information
Technology, Mechanics and Optics
Il postulato di Bertrand (bertrand)
Descrizione del problema
Un numero intero x > 1 è detto numero primo se ha due soli divisori: 1 e x stesso. Come è noto, 2, 3, 5, 7, 11 e 13 sono numeri primi mentre 15 non
lo è, in quanto divisibile per 3.
La versione debole del postulato di Bertrand (che in realtà è il teorema
Bertrand-Chebyshev) afferma che, per ogni intero n > 1, esiste sempre almeno un numero primo p tale che n < p< 2n.
Questa relazione è stata ipotizzata per la prima volta da Bertrand, che la
verificò personalmente per tutti i numeri n nell'intervallo 2 <= n <= 3 × 106. La relazione fu poi definitivamente dimostrata da Chebyshev.
Il compito che questo problema propone è un po' più ampio: scrivere un programma che riceve un intero n > 1 e stabilisce quanti numeri primi p sono
compresi nell'intervallo n < p< 2n.
Dati di input
Il file input.txt è composto da un'unica riga contenente il numero intero n (2
<= n <= 3.000).
Dati di output
Il file output.txt è composto da una sola riga, contenente un intero che
rappresenta quanti numeri primi p sono compresi nell'intervallo n < p < 2n.
Esempi di input/output
File input.txt File output.txt
2 1
File input.txt File output.txt
239 39
Autore/i
Due Scatole (duescatole)
Descrizione del problema
Sul tavolo ci sono due scatole vuote: la prima ha dimensioni A1 × B1 × C1 e la seconda A2 ×B2 × C2, espresse come base × altezza × profondità in una
qualche unità di misura.
Si vuole determinare se una delle due scatole può essere contenuta nell'altra,
sapendo che le due scatole possono ruotare (di 90° alla volta) attorno a ciascuno dei propri lati, per cui le facce delle due scatole sono sempre parallele
oppure ortogonali.
Tali scatole hanno spessore nullo e, quindi, una può essere contenuta nell'altra anche a parità di lunghezza di alcuni dei lati (mentre nella realtà ciò non è
possibile).
Per esempio, la scatola di dimensioni 3 × 9 × 7 è contenuta nella scatola 7 ×
5 × 10 facendo combaciare i due lati lunghi 7 e allineando il lato lungo 3 con quello lungo 5 (e quindi quello lungo 9 con quello lungo 10). Non è invece
contenuta nella scatola 5 × 5 × 10 perché il lato lungo 9 deve necessariamente essere allineato con quello lungo 10 e, quindi, il lato lungo 7 non può essere
allineato con uno dei due lati rimanenti, ciascuno di lunghezza pari a 5.
Scrivere un programma che riceve le dimensioni A1 × B1 × C1 e A2 × B2 × C2 e
determina se una delle due scatole può essere contenuta nell'altra.
Dati di input
Il file input.txt è composto da due righe. La prima riga contiene i tre numeri
interi A1, B1 eC1 separati da uno spazio. La seconda riga contiene i tre numeri
interi A2, B2 e C2 separati da uno spazio. Tutti i numeri sono positivi e non superiori a 1000.
Dati di output
Il file output.txt è formato da una sola riga determinata come segue:
se le due scatole sono uguali, il file deve contenere la scritta Scatole
uguali; se la prima scatola può essere contenuta nella seconda, il file deve
contenere la scrittaPrima scatola piu' piccola della seconda; se la seconda scatola può essere contenuta nella prima, il file deve
contenere la scrittaPrima scatola piu' grande della seconda; in tutti gli altri casi, il file deve contenere la scritta Scatole non
confrontabili.
Esempi di input/output
File input.txt File output.txt
1 2 3
3 2 1
Scatole uguali
File input.txt File output.txt
2 2 3
3 2 1
Prima scatola piu' grande della seconda
File input.txt File output.txt
2 2 3
3 2 3
Prima scatola piu' piccola della seconda
File input.txt File output.txt
3 4 5
2 4 6
Scatole non confrontabili
Riconoscimento del linguaggio (linguaggio)
Descrizione del problema
Nella teoria dei linguaggi formali e degli automi, uno dei concetti di base è appunto quello di linguaggio formale, che può essere definito come un
insieme di parole, dove ogni parola è una sequenza finita di simboli.
Il problema proposto consiste nel determinare se una certa parola appartiene o
meno al linguaggio {0n 1n 2n, n >= 1}, dove i simboli sono 0, 1 e 2. Questo
linguaggio è costituito dalle parole nelle quali il numero di 0 è uguale al
numero di 1 e al numero di due. Inoltre, tutti gli 0 di ciascuna parola devono
precedere tutti gli 1 della parola, e questi a loro volta devono precedere tutti
i 2.
Ad esempio, la parola 001122 appartiene al linguaggio perché ci sono due 0,
seguiti da due1 e da due 2 (n=2). La parola 000111122220 non vi appartiene in
quanto pur essendoci n=4 occorrenze di ciascun simbolo, uno 0 appare dopo
gli 1 e i 2. In modo analogo, la parola00011112222 non vi appartiene perché il
numero di 0 è differente da quello degli altri simboli.
Scrivere un programma che riceve un dato elenco di p parole e stabilisce, per ciascuna di esse, se appartiene al suddetto linguaggio.
Dati di input
Il file input.txt è composto da p+1 righe.
La prima riga contiene un intero positivo che rappresenta p (p <= 10), il numero di parole da analizzare.
Ciascuna delle successive p righe contiene una delle parole da analizzare. Le
parole non sono vuote, e la loro massima lunghezza è di 300 caratteri.
Dati di output
Il file output.txt è composto da p righe. Nella i-esima riga, deve essere
riportata l'indicazione SI se la i-esima parola in input appartiene al
linguaggio {0n 1n 2n, n >= 1}, oppure l'indicazione NO in caso contrario.
Esempi di input/output
File input.txt File output.txt
3
SI
001122
0001112222
000111222
NO
SI
File input.txt File output.txt
2
0000111122220
012
NO
SI
Autore/i
A.S. Stankevich, ACM ICPC Team, St. Petersburg State University of Information
Technology, Mechanics and Optics
Patterns (patterns)
Descrizione del problema
Un pattern di dimensione n è una stringa di lunghezza n i cui caratteri sono elementi del seguente
insieme {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, ?}.
I pattern sono trasformati in stringhe usando le seguenti regole:
i simboli da 0 a 9 possono essere trasformati solo in se stessi; il simbolo a può essere trasformato in uno dei simboli 0, 1, 2, 3; il simbolo b può essere trasformato in uno dei simboli 1, 2, 3, 4; il simbolo c può essere trasformato in uno dei simboli 2, 3; 4, 5; il simbolo d può essere trasformato in uno dei simboli 3, 4, 5, 6; il simbolo e può essere trasformato in uno dei simboli 4, 5, 6, 7; il simbolo f può essere trasformato in uno dei simboli 5, 6, 7, 8; il simbolo g può essere trasformato in uno dei simboli 6, 7, 8, 9; il simbolo ? può essere trasformato in uno dei simboli da 0 a 9.
Sono assegnati due pattern p1 e p2 e siano S1 e S2 gli insiemi di stringhe che possono essere
ottenuti, rispettivamente da p1 e p2, usando le regole di trasformazione sopra definite. Si deve
trovare il numero di stringhe che appartengono alla intersezione di S1 e S2.
Dati di input
La prima riga del file di input contiene il pattern p1 e la seconda riga contiene p2. I due pattern
hanno la medesima dimensione n, 0 < n < 10.
Dati di output
Contiene il numero che rappresenta la soluzione del problema.
Esempi di input/output
File input.txt File output.txt
???
abc
64
File input.txt File output.txt
?a?
000
1
Potenza esatta (potesatta)
Descrizione del problema
Un intero positivo x è una potenza esatta se esistono due interi a e b (b>1) tali che x=ab. Si fa notare
che qualche volta questi numeri a e b non possono essere determinati in modo univoco. Per
esempio, per x = 16, si hanno due possibilità (a=2 e b=4 oppure a=4 e b=2), infatti 16 = 42 = 2
4.
Dato un intero x, il problema consiste nel trovare il numero delle coppie (ai,bi) per cui
risulta x= ai b
i.
Dati di input
Il file di input contiene un numero intero x (1 < x < 109 + 1).
Dati di output
Il file di output contiene una sola riga, contenente il numero k di coppie (a,b) per cui x=ab.
Esempi di input/output
File input.txt File output.txt
3 0
File input.txt File output.txt
16 2
Punti Fissi (puntifissi)
Descrizione del problema
Una permutazione P[1..n] di dimensione n è una sequenza nella quale ciascun numero intero da 1 a n compare una e una sola volta. Esempi di
permutazioni sono le due sequenze 1,4,3,5,2 (n=5) e 3,2,1 (n=3) mentre la sequenza 1,2,3,5,1 (n=5) non è una permutazione poiché il numero 1 compare
due volte.
L'intero j si definisce punto fisso della permutazione P se vale P[j] = j, dove 1
<= j <= n. Ad esempio, nella permutazione 1,4,3,5,2 ci sono due punti fissi, 1 e 3, mentre la permutazione 5,4,3,2,1 non ha alcun punto fisso.
È interessante stabilire quante permutazioni di dimensione n hanno
esattamente k punti fissi. Per esempio, dato n=3, abbiamo sei permutazioni,
dove tra parentesi indichiamo il rispettivo numero di punti fissi: 1,2,3 (3); 1,3,2 (1); 2,1,3 (1); 2,3,1 (0); 3,1,2 (0); 3,2,1 (1). In tale situazione, non ci
sono permutazioni con k=2 punti fissi; per k=1, ne abbiamo tre, e così via.
Scrivere un programma che, ricevuti due numeri n e k, trova il numero di permutazioni di dimensione n che hanno esattamente k punti fissi.
Dati di input
Il file input.txt è composto da un'unica riga contenente i due numeri
interi n (1 <= n <= 9) e k (0 <= k <= n) separati da uno spazio.
Dati di output
Il file output.txt è composto da una sola riga contenente un intero non
negativo, ossia il numero di permutazioni di dimensione n che hanno esattamente k punti fissi.
Esempi di input/output
File input.txt File output.txt
5 2 20
File input.txt File output.txt
9 6 168
File input.txt File output.txt
2 1 0
File input.txt File output.txt
9 0 133496
Quadrato (quadrato)
Descrizione del problema
Dati quattro punti nel piano cartesiano, si vuole determinare se essi formano i vertici di un quadrato, comunque disposto nel piano cartesiano. Si noti che non
necessariamente i lati del quadrato devono essere paralleli od ortogonali rispetto agli assi; inoltre, in alcuni casi, alcuni punti potrebbero essere
coincidenti.
Scrivere un programma che riceve le coordinate dei quattro punti nel piano
cartesiano e determina se questi formano un quadrato. [Suggerimento: dati tre punti P, Q e R, per verificare se l'angolo PQR è retto, sia V1 = (x1, y1) il
vettore che collega P a Q e V2 = (x2,y2) il vettore che collega R a Q (basta prendere la differenza tra coordinate omologhe delle coppie di punti).
Affinché PQR sia retto, tali vettori devono essere perpendicolari, ossia il loro prodotto scalare deve essere nullo: x1 x x2+ y1 x y2 = 0.]
Dati di input
Il file input.txt è composto da quattro righe. La i-esima riga contiene due
interi x e y separati da uno spazio che rappresentano le coordinate dell'i-esimo
punto (1 <= i <= 4). Tutte le coordinate sono minori o uguali a 1000 in valore assoluto.
Dati di output
Il file output.txt è composto da una sola riga contenente l'indicazione SI se i
quattro punti sono i vertici di un quadrato oppure l'indicazione NO in caso
contrario.
Esempi di input/output
File input.txt File output.txt
0 0
1 1
0 1
1 0
SI
File input.txt File output.txt
0 0
0 0
1 1
0 1
NO
Quadrato di parole (quadratopar)
Descrizione del problema
Alcuni insiemi di parole hanno proprietà interessanti; in particolare, le parole possono essere scritte
nelle celle di un quadratonxn in modo tale che tutte le parole possono essere lette sia
orizzontalmente sia verticalmente. Allo stesso tempo, la parola sulla prima riga deve essere presente
sulla prima riga, quella della seconda riga essere anche sulla seconda colonna e così via per ogni
parola presente sulla riga i deve essere presente sulla colonna i. Un esempio di un tale insieme è
dato da S = {"DATE", "FIND", IDEA", NEXT"}. Questo insieme può essere inserito nella seguente
griglia quadrata
F I N D
I D E A
N E X T
D A T E
Queste griglie sono dette quadrati di parole. I quadrati più grandi conosciuti hanno dimensione 10.
Data una griglia 4 x 4, con una lettera maiuscola dell'alfabeto latino in ciascuna cella, determinare
se questa griglia rappresenta un quadrato di parole.
Dati di input
Il file di input contiene quattro righe. Ciascuna riga contiene quattro lettere maiuscole separate da
uno spazio.
Dati di output
Se la griglia descritta dall'input è un quadrato di parole stampare WORD SQUARE, altrimenti
stampare SOMETHING OTHER.
Esempi di input/output
File input.txt File output.txt
N R Y E
T U H O
F L R E
E C K F
SOMETHING OTHER
File input.txt File output.txt
Z H O R WORD SQUARE
H H K C
O K Y L
R C L X
Autore/i
Simmetria (simmetria)
Descrizione del problema
Dati una retta R e un punto A nel piano cartesiano, si definisce il punto B simmetrico ad Arispetto a R come l'altro estremo del
segmento AB perpendicolare a R, tale che la distanza di A rispetto a R è uguale a quella di B rispetto a R. In altre parole, AB è diviso in due parti uguali
dall'intersezione con R e, quindi, A è speculare a B rispetto a R. Si noti che,
qualora il punto A appartenga alla retta R, il punto B coincide con il punto A.
Scrivere un programma che, presa una retta R parallela a uno degli assi cartesiani e un punto A nel piano cartesiano, calcola le coordinate del
punto B simmetrico ad A rispetto a R.
Dati di input
Il file input.txt è composto da due righe. La prima riga contiene quattro
interi xL1, yL1, xL2e yL2, separati da uno spazio, che rappresentano le coordinate di due punti L1 e L2appartenenti alla retta R.
La seconda riga contiene due interi xA e yA separati da uno spazio, che
rappresentano le coordinate del punto A.
Tutte le coordinate sono interi non superiori a 1000 in valore assoluto.
Dati di output
Il file output.txt è composto da una sola riga contenente due
interi xB e yB separati da uno spazio, che rappresentano le coordinate del punto B simmetrico ad A rispetto a R.
Esempi di input/output
File input.txt File output.txt
0 0 0 1
10 10
-10 10
File input.txt File output.txt
0 0 1 0
10 10
10 -10
Stringhe (stringhe)
Descrizione del problema
Data una stringa s1s2...sn di lunghezza n, la stringa sksk+1sk+2 ...sns1s2...sk-1 è uno cyclic shift della
stringa s. La stringa sisi+1...sj-1sj , con 0 < i <= j <= n, si dice sottostringa di s.
Assegnate due stringhe a e b, scrivere un programma per trovare il numero di sottostringhe di a che
sono cyclic shift della stringa b.
Dati di input
La prima riga del file di input contiene la stringa a (0 < |a| < 1001). La seconda riga contiene la
stringa b (0 < |b| =< min(100, |a|)). I caratteri di queste stringhe possono essere lettere dell'alfabeto
latino e/o cifre decimali.
Dati di output
Contiene un unico numero, la soluzione del problema.
Esempi di input/output
File input.txt File output.txt
abcabc
abc
4
File input.txt File output.txt
abcabc
acb
0
Una grande tavola pitagorica (tavola)
Descrizione del problema
Gianni ama la matematica. Qualche tempo fa, ha deciso che la "vecchia" tavola pitagorica di dimensione 10×10 era troppo restrittiva.
Ha quindi deciso di costruire una tabella di moltiplicazioni di dimensione generica n × m. La tabella ha n righe, numerate da 1 a n, e m colonne,
numerate da 1 a m. La casella che si trova all'intersezione fra la riga i (1 <= i <= n) e la colonna j (1 <= j <= m), contiene il prodotto tra il numero i e
il numero j.
Prima di costruirla, Gianni vuole conoscere le frequenze delle cifre decimali (0, 1, ..., 9): si chiede quante volte ciascuna cifra decimale comparirà nella
tabella. Per esempio, se una casella contiene il numero 121, la cifra 1
comparirà due volte e la cifra 2 una volta. Tale conteggio va esteso a tutte le caselle della tabella, effettuando delle somme cumulative per ogni cifra
decimale e ottenendo così le frequenze.
Per esempio, con n=3 e m=4, abbiamo che la tabella contiene, in ordine di riga: 1, 2, 3, 4, 2, 4 , 6, 8, 3, 6, 9, 12. Quindi, le cifre 1, 3, 4 e 6 compaiono
due volte ciascuna, la cifra 2 tre volte, le cifre 8 e 9 una volta ciascuna e tutte le altre cifre compaiono zero volte. Gianni quindi scrive tali frequenze in ordine
crescente di cifra: 0, 2, 3, 2, 2, 0, 2, 0, 1, 1.
Scrivere un programma che, ricevuti i due interi n e m, scrive le frequenze
delle cifre decimali (in ordine crescente di cifra) che compaiono nella tabella di dimensione n x m.
Dati di input
Il file input.txt è composto da un'unica riga contenente i due numeri
interi n e m (1 <= n,m <= 1000) separati da uno spazio.
Dati di output
Il file output.txt è composto da dieci righe. La c-esima riga contiene la
frequenza della cifra c-1 (1 <= c <= 10): la prima riga deve contenere il numero di 0 presenti nella tabella delle moltiplicazioni, la seconda il numeri di
1, e così via.
Esempi di input/output
File input.txt File output.txt
10 10 28
24
27
15
23
15
17
8
15
6
Tavole graziose (tavgraziose)
Descrizione del problema
Consideriamo un reticolo rettangolare con n righe e m colonne; in ciascuna cella è presente una
delle due cifre 0 oppure 1.
Supponiamo di definire grazioso il reticolo se in esso non è contenuto nessun quadrato 2x2 riempito
completamente o dalla cifra 0 o dalla cifra 1.
Per esempio, il reticolo 4x4 è grazioso, mentre non lo è il reticolo 3x3.
1 0 1 0
1 1 1 0
0 1 0 1
0 0 0 0
0 0 1
0 0 1
1 1 1
Sono assegnati diversi reticoli e voi dovete scrivere un programma che verifichi per ciascuno di essi
se è un reticolo grazioso oppure no.
Dati di input
La prima linea contiene il numero intero t (0 <t< 11) dei reticoli da esaminare. Seguono le
descrizioni dei singoli reticoli. Per ciascun reticolo, la prima linea contiene due interi n e m (0 < n,
m < 101); ciascuna delle successive n linee contiene (per i = 1,n) gli m numeri (per j = 1, m) separati
da uno spazio, che sono gli elementi ai.j del reticolo in esame.
Ogni ai.j è uguale a 0 oppure a 1.
Dati di output
Per ognuno dei t casi da esaminare, stampare YES se il relativo reticolo è grazioso; altrimenti
stampare NO.
Esempi di input/output
File input.txt File output.txt
3
1 1
0
4 4
1 0 1 0
1 1 1 0
YES
YES
NO
0 1 0 1
0 0 0 0
3 3
0 0 1
0 0 1
1 1 1
Problema di assegnamento (assegnamento)
Descrizione del problema
Il problema dell'assegnamento è uno dei problemi fondamentali di ottimizzazione combinatorica. In
una delle sue forme il problema potrebbe essere formulato come segue.
Ci sono n agenti numerati da 1 ad n ed n compiti pure numerati da 1 ad n. Ad ogni agente può
essere assegnata l'esecuzione di uno qualsiasi dei compiti con un costo che dipende dalla coppia
agente-compito. Il costo dell'agente i nell'effettuare il compito jviene denotato con cij. Viene
richiesto di effettuare tutti i compiti assegnando esattamente un agente a ciascun task in modo tale
da minimizzare il costo totale di tutti gli assegnamenti.
Scrivere un programma che risolva il problema dell'assegnamento.
Dati di input
La prima riga del file di input contiene un numero intero n non negativo (1<= n <= 10).
Ciascuna delle n righe successive contiene n numeri: il j-esimo numero della riga i+1 contiene il
costo cij (0 <= cij <= 109).
Dati di output
Deve contenere il risultato richiesto dal problema, cioè il minimo costo totale dell'assegnamento di
tutti gli n agenti agli n compiti.
Esempi di input/output
File input.txt File output.txt
2
1 2
2 1
2
File input.txt File output.txt
2
1 2
3 4
5
Conteggio di punti e rettangoli ( conta )
Descrizione del problema
È dato un rettangolo con un vertice nel'origine del piano cartesiano e il vertice opposto situato nel punto (W,H).
È dato un secondo rettangolo, situato completamente all'interno del precedente, i cui vertici hanno coordinate costituite da numeri interi.
Definiamo w e h la larghezza e l'altezza di questo secondo rettangolo.
Si chiede di calcolare il numero di punti aventi coordinate costituite da numeri interi che siano situati completamente all'interno del primo rettangolo e
all'esterno del secondo (escludendo cioè i punti situati sui lati).
Dati di input
L'unica riga del file di input contiene quattro numeri
interi: W, H, w e h(3<=W,H<=109,1<=w<=W-2, 1<=h<=H-2).
Dati di output
Il numero di punti richiesto.
Esempi di input/output
File input.txt File output.txt
3 3 1 1 0
File input.txt File output.txt
4 3 1 1 2
Conteggio dei divisori (contdivisori)
Descrizione del problema
Sia x un numero intero. Diremo che y è un divisore di x se 1 <= y <= x e il resto della divisione
di x per y è uguale a zero.
Si chiede di contare tutti i possibili divisori di un dato numero x.
Dati di input
Il file di input contiene un intero x (1 <= x <= 1018
). Tutti i divisori primi di x non superano 1000.
Dati di output
Deve contenere il risultato richiesto dal problema.
Esempi di input/output
File input.txt File output.txt
12 6
File input.txt File output.txt
239 2
Divisione e resto (divresto)
Descrizione del problema
Vengono dati due interi non negativi n e k. Si chiede di trovare il valore di n modulo k (cioè il resto
della divisione di n per k).
Dati di input
Il file di input contiene due numeri interi: n e k (1 <= n <= 10100
, 1 <= k <= 109).
Dati di output
Il file di output deve contenere la risposta richiesta dal problema.
Esempi di input/output
File input.txt File output.txt
239 16 15
File input.txt File output.txt
4638746747645731289347483927 6784789 1001783
Autore/i
Fattorizzazione ( fattori )
Descrizione del problema
È dato il numero intero x. Si deve rappresentare tale numero come prodotto di due numeri interi a e b (x=a *b) scelti in modo tale che sia massima la somma
delle cifre che li compongono.
Dati di input
L'unica riga del file di input contiene il numero intero x (2 <=x<=109).
Dati di output
Il valore massimo della somma delle cifre dei numeri a e b.
Esempi di input/output
File input.txt File output.txt
6 7
File input.txt File output.txt
10 7
Qualità di una stringa ( diff )
Descrizione del problema
Definiamo come qualità di una stringa la differenza fra la massima e la minima posizione nell'alfabeto delle lettere che la compongono.
Per esempio, facendo riferimento a lettere minuscole dell'alfabeto inglese, la qualità della stringa ab è 2-1=1, mentre la qualità della stringa abzc è 26-
1=25.
Scrivere un programma che, data una stringa, calcola la sottostringa che, fra tutte quelle di qualità massima (cioè pari alla qualità della stringa data), abbia
lunghezza minima.
Dati di input
L'unica riga del file di input contiene la stringa s, costituita da lettere minuscole
dell'alfabeto inglese. La lunghezza di s è maggiore di zero e non superiore a 2*105.
Dati di output
Inserire nel file di output la sottostringa richiesta. Se ci sono più sottostringhe
equivalenti, restituire quella che appare più a sinistra.
Esempi di input/output
File input.txt File output.txt
aba ab
File input.txt File output.txt
zzz z
Rettangoli ( rettangoli )
Descrizione del problema
È dato un rettangolo con un vertice nell'origine del piano cartesiano e il vertice opposto situato nel punto (W,H).
Si chiede di trovare il numero di rettangoli non degeneri, con i lati paralleli agli assi cartesiani e con le coordinate dei vertici date da numeri interi, che si
trovano all'interno o sui bordi del rettangolo dato.
Dati di input
L'unica riga del file di input contiene i due numeri interi W e H (con 1 <= W,H <= 103).
Dati di output
Il numero di rettangoli richiesto.
Esempi di input/output
File input.txt File output.txt
1 1 1
File input.txt File output.txt
2 1 3
elezione del k-esimo minimo (selezione)
Descrizione del problema
Sono dati n numeri interi distinti a1, a2, ..., an (non necessariamente ordinati). Il k-esimo minimo è il numero aj tale che ci sono K-1 numeri più piccoli di lui
tra i rimanenti interi. Trovare il k-esimo minimo in a1, a2, ..., an.
Dati di input
Il file input.txt è composto da due righe. La prima riga contiene i due
interi n e k separati da uno spazio, dove 1 <= n <= 105 e 1 <= k <= min(n,
10). La seconda riga contiene ninteri a1, a2, ..., an separati da uno spazio, il cui valore è compreso tra -109 e 109.
Dati di output
Il file output.txt è composto da una sola riga contenente l'intero aj che è il k-
esimo minimo.
Esempi di input/output
File input.txt File output.txt
5 2
447891263 151798456 700562442 865711803 172370486
172370486
File input.txt File output.txt
1 1
395905565
395905565
Sequenza (sequenza)
Descrizione del problema
Definiamo una sequenza di numeri interi a1 = 1 , an = an-1 + 3 se il numero n compare nella stessa
sequenza (cioè se esiste un jtale che aj = n) altrimenti an = an-1 + 2.
I primi 8 numeri di questa sequenza sono: 1,3,6,8,10,13,15,18.
Si chiede di trovare an.
Dati di input
Il file di input contiene un intero n (1 <= n <= 105).
Dati di output
Deve contenere il risultato richiesto dal problema.
Esempi di input/output
File input.txt File output.txt
1 1
File input.txt File output.txt
8 18
Due triangoli ( simili )
Descrizione del problema
Sono dati due triangoli ABC e DEF. Scrivere un programma che determini se i due triangoli sono simili.
Dati di input
La prima riga del file di input contiene le coordinate dei vertici del triangolo ABC: xA, yA, xB,yB, xC, yC.
La seconda riga del file di input contiene le coordinate dei vertici del
triangolo DEF.
Tutti i valori nel file di input non superano in valore assoluto 5000. Inoltre le
aree di ABC eDEF sono positive.
Dati di output
Il file di output deve contenere l'indicazione "YES" se i due triangoli sono simili, "NO" in caso contrario.
Esempi di input/output
File input.txt File output.txt
0 0 1 0 0 1
10 10 12 10 10 12
YES
File input.txt File output.txt
0 0 1 0 0 1
0 0 10 0 0 5
NO
Sistema di diseguaglianze ( sistema )
Descrizione del problema
È dato un sistema di diseguaglianze, del tipo: x>y, x>a, y<a, y<z (x, y e z sono le tre possibili variabili, a è un numero
intero compreso fra 0 e 100).
Scrivere un programma che calcoli il numero di soluzioni intere del sistema
dato, cioè il numero di terne (x,y,z) - con x, y e z compresi fa 0 e 100 - che soddisfano tut le diseguaglianze del sistema.
Dati di input
La prima riga del file di input contiene il numero n di diseguaglianze del
sistema (0<=n<=25). Ciascuna delle righe successive contiene una
diseguaglianza.
Dati di output
Il numero di terne richiesto.
Esempi di input/output
File input.txt File output.txt
6
x > 2
x < 5
y > 2
y < 5
z > 2
z < 5
8
File input.txt File output.txt
1
x > y
510050
Somma di un segmento ( somma )
Descrizione del problema
Data una sequenza di n numeri interi a1, a2, ..., an, si definisce somma di un segmento [l,r] (con 1 <= l <= r <= n) il risultato della sommatoria al + ...
+ ar.
Scrivere un programma che, data a sequenza di numeri interi, determina se
esiste un segmento la cui somma sia uguale a x.
Dati di input
La prima riga del file di input contiene il numero intero n (1 <= n <= 1000). La seconda riga del file di input contiene n numeri interi ai separati da spazi. Tutti
i numeri ai non superano in valore assoluto il numero 109. La terza riga del file
contiene il numero intero x (<= 109).
Dati di output
Il file di output contiene i due numeri interi l e r (con l <= r) che definiscono il segmento. Se non esiste alcun segmento che soddisfa i requisiti, il file di
output contiene i due valori -1 -1.
Esempi di input/output
File input.txt File output.txt
4
1 4 2 3
5
3 4
File input.txt File output.txt
4
1 2 3 4
-5
-1 -1
Descrizione del problema
Conveniamo di chiamare ennesima superpotenza di 2 il valore di 22n
. Ad esempio la terza
superpotenza di 2 è 223
= 28 = 256. Si chiede di calcolare la ennesima superpotenza di 2 modulo m.
Dati di input
Il file di input contiene due interi: n (0 <= n <= 105) ed m (2 <= m <= 10
4).
Dati di output
Il risultato richiesto dal problema.
Esempi di input/output
File input.txt File output.txt
3 1000 256
File input.txt File output.txt
10 10 6
Teoria dei giochi (teoriagiochi)
Descrizione del problema
Nella teoria dei giochi uno dei concetti più interessanti è il gioco a somma zero per due giocatori.
Questi giochi sono caratterizzati da un insieme X di strategie per il primo giocatore e da un insieme
Y di strategie per il secondo giocatore. Viene poi stabilita la funzione delle vincite K(x,y}
con xX e yY. Se X e Y sono insiemi finiti si parla di gioco matriciale perché la funzione
delle vincite può essere rappresentata da una matrice.
Consideriamo un gioco matriciale con X 1,..., n e Y 1,..., m e denotiamo la matrice con K.
Così Kij è la vincita del primo giocatore quando sceglie la strategia i assumendo che il secondo
giocatore scelga la strategia j. Se questo valore è positivo si tratta effettivamente di una vincita. Se
invece è negativo si tratta di una perdita (e quindi di una vincita per il secondo giocatore).
Il valore di maximin di questo gioco è maxi=1...n minj=1...m Kij. Il valore di minimax di questo gioco è
invece minj=1...mmaxi=1...n Kij.
Data una matrice delle vincite di un gioco matriciale si chiede di calcolare i suoi valori di maximin
e di minimax.
Dati di input
La prima riga del file di input contiene due numeri interi n ed m (1 <= n, m <= 100). Ciascuna
delle n righe successive contienem numeri interi. Il j-esimo numero della i-esima di queste righe
contiene Kij. Tutti i Kij non superano 100 in valore assoluto.
Dati di output
Dare in uscita i valori di maximin e di minimax.
Esempi di input/output
File input.txt File output.txt
3 3
4 -1 -3
-2 1 3
0 2 -3
-2 2
File input.txt File output.txt
3 4
-1 0 2 1
-2 0 1 0
2 1 -1 -2
Triangolo (triangolo)
Descrizione del problema
Si consideri un triangolo ABC nel piano cartesiano. I vertici ABC abbiano rispettivamente
coordinate (xA, yA), (xB, yB), (xC,yC). Il centro di massa di questo triangolo è il punto di coordinate
((xA+xB+xC)/3, (yA+yB+yC)/3).
Date le coordinate del centro di massa di ABC si chiede di trovare i suoi vertici che soddisfano alle
seguenti condizioni:
le loro coordinate sono intere; le loro coordinate non superano 10
9 in valore assoluto;
l'area del triangolo ABC è non nulla.
Dati di input
Il file di input contiene solo due interi: le coordinate x e y (-109
<= x , y <= 109) del centro di
massa del triangolo.
Dati di output
Se esiste un triangolo che soddisfa a tutti i vincoli dare in uscita sulla prima riga la stringa YES,
altrimenti rispondere NO. Se la risposta è YES scrivere in uscita, rispettivamente sulla seconda,
terza e quarta riga le coordinate dei vertici trovati. Se ci sono più triangoli che soddisfano ai vincoli
imposti dal problema dare in uscita le coordinate dei vertici di ciascuno di essi.
Esempi di input/output
File input.txt File output.txt
9 4 YES
3 9
6 3
18 0