#1648
Negrimon a găsit într-o culegere această problemă #legendară: peste un şir de caractere de lungime N
, alcătuit din litere mici ale alfabetului englez, se efectuează M
operaţii de următoarele tipuri:
x
, pe poziţia p
, după deplasarea cu o poziţie la dreapta a caracterelor situate pe poziţiile mai mari sau egale cu p
. Dacă valoarea p
este egală cu lungimea şirului, x
este alipit la finalul şirului.1
dacă secvenţa de litere care începe la poziţia q1
şi are lungimea lg
coincide literă cu literă, cu secvenţa care începe la poziţia q2
şi are aceeaşi lungime lg
şi se răspunde cu 0
în caz contrar. Este posibil ca cele două secvenţe să se suprapună complet sau parţial în şirul din care ele fac parte.Fiind dat un şir de N
litere mici şi o listă de M
operaţii, să se afişeze răspunsurile la operaţiile de tip 2
, respectând ordinea din succesiunea de operaţii date.
Urmasii lui Moisil, 2016
#615
După ce a ajutat la conectarea oraşelor Nordemos şi Suderim, Negrimon s-a hotărât să-şi urmeze destinul şi să devină un programamon roşu. Pentru a-şi începe călătoria, este nevoit să părăsească Udobje Lurrak şi să treacă prin Sha’ar Azih, poarta magică de la ieşirea din oraşul Estumar. Această poartă se bazează pe un sistem de runix-uri aşezate în linie, numerotate de la 1
la N
. Un runix este un pătrat pe care este înscrisă o literă mică, din mulţimea
unui alfabet restrâns, format din primele L
litere ale alfabetului englez. Alfabetul restrâns este circular, astfel încât după ultima literă urmează prima, iar înainte de prima literă este ultima literă din alfabet.
În starea iniţială a sistemului, primul runix este setat pe litera a
, al doilea runix este setat pe următoarea literă din alfabetul restrâns ş.a.m.d .
Când Negrimon ajunge la poartă, aceasta prinde viaţă şi se produce un şir de acţiuni de următorul tip:
1. Runix-ul cu numărul r
împreună cu toate runix-urile din stânga se deplasează şi se separă de cele din dreapta (dacă există), formându-se astfel două grupuri independente (iniţial toate runix-urile formează un singur grup).
2. Toate runix-urile din grupul din care face parte runix-ul cu numărul r
execută o schimbare de pas p
. Aceasta constă în înlocuirea literei asociate cu următoarea a p
-a literă din alfabet (p > 0
) sau cu precedenta a (-p)
-a literă din alfabet (p < 0
). Datorită circularităţii alfabetului, oricât de mare ar fi p
va exista o literă care să fie la
distanţa p
faţă de litera actuală.
3. Negrimon primeşte o întrebare de tipul: pe ce literă este setat runix-ul cu numărul r
?
Poarta se deschide dacă Negrimon răspunde corect la toate întrebările primite şi astfel își poate continua călătoria în Azih Lurrak.
Ajutaţi-l pe Negrimon să deschidă poarta.
#149
Claudia vrea să construiască o scară cu N
trepte astfel încât prima treaptă să fie la înălţimea 0
şi ultima treaptă să fie la înălţimea H
. Fiind pusă pe glume, ea îi cere arhitectului să proiecteze o scară neobişnuită, în care treptele sunt dispuse astfel încât, la un moment dat, să poţi urca, coborî sau rămâne la acelaşi nivel. Pentru a fi uşor de urcat sau coborât, valoarea absolută a diferenţei dintre înălţimile la care se află oricare două trepte consecutive trebuie să fie mai mică sau egală cu o valoare dată, K
. Nicio treaptă nu se poate afla la o înălţime negativă sau la o înălţime mai mare decât H
.
Scrieţi un program care să determine numărul de scări diferite cu N
trepte, ce pot fi construite respectând cerinţele Claudiei. Deoarece numărul de scări poate fi foarte mare, determinaţi restul împărţirii acestui număr la 666013
.
Urmasii lui Moisil, Iasi, 2013
#150
Bulbuka este foarte pasionată de gătit deserturi. Ea a decis să facă
(n+2)*(n+2)
brioşe pe care le-a numerotat (cu ciocolată, bineinţeles) în modul următor: primele n*n
brioşe au fost numerotate de la 1
la n*n
, iar restul până la (n+2)*(n+2)
au primit valoarea 0
. De asemenea, după ce au fost gata, Bulbuka nu a putut rezista tentaţiei de a ordona brioşele într-un pătrat cu latura (n+2)
după cum urmează: cele cu 0
pe conturul exterior iar cele numerotate de la 1
la n*n
, în interior, în ordine crescătoare, pe linii, de sus in jos, ca în figura alăturată. Bulbuka a numit această aranjare configuraţia ordonată a brioşelor.
Acest aranjament frumos a durat foarte puţin deoarece, pe când Bulbuka stătea cu spatele, Randomel a amestecat brioşele între ele, într-o ordine aleatoare. Când s-a întors şi a văzut fapta, ea s-a supărat foarte tare şi l-a pedepsit pe Randomel punându-l să le aranjeze la loc cum erau (ca în imagine) folosind doar un set limitat de operaţii: shiftări circulare pe linii şi pe coloane. O shiftare presupune deplasarea circulară la dreapta, pe linie sau în jos, pe coloană, cu cel puţin una şi cel mult n+1
poziţii.
Randomel vă roagă să scrieţi un program care, pentru o aranjare aleatorie a brioşelor, să afişeze shiftările circulare posibile care transformă configuraţia dată într-o configuraţie ordonată.
Urmasii lui Moisil, Iasi, 2013
#631
Alexandru dorește să devină expert în securitate, iar pentru aceasta s-a apucat să învete mai multe despre siguranța parolelor. El dorește să afle câte parole poate crea folosind a
litere mici ale alfabetului englez și b
litere mari ale alfabetului englez, c
cifre si d
caractere din mulțimea {!, @, #, $, %}
. Totodată, el vrea să găsească parola cu numărul x
în ordine lexicografică, formată din caracterele descrise mai sus.
Cunoscând a
, b
, c
, d
si x
se cere:
a) A x
-a parolă în ordine lexicografică, formată din caracterele menționate în enunț.
b) Numărul de parole diferite formate din caracterele menționate în enunț, modulo 666013
.
Grigore Moisil, 2014
#1896
Fie S un șir de caractere cu litere mici și litere mari. Se sortează în ordine lexicografică toate subsecvențele distincte ale lui S
. Se dă un număr K
și un vector k
cu K
numere întregi, se cere pentru fiecare număr cel de k
i
-lea subșir lexicografic.
Concursul de Informatica "Spiru Haret" Targu Jiu, ed. I
#2053
Fie șirul Fibonacci, dat prin F[1] = 1
, F[2] = 1
și relația de recurență F[k] = F[k-1] + F[k-2]
, k ≥ 3
. Se consideră un număr natural N
și un șir A[1], A[2],...,A[N]
de N
numere naturale distincte. Se consideră de asemenea și un număr natural T
.
Să se scrie un program care determină o valoare D
ce reprezintă numărul termenilor din șirul Fibonacci F[1], F[2] ,..., F[T]
care sunt divizibili cu cel puțin unul dintre numerele A[1], A[2],...,A[N]
.
Lot Covasna 2017
#4026
Se consideră toate şirurile finite de numere naturale nenule ordonate astfel:
[1]; [1,1]; [2]; [1,1,1]; [1,2]; [2,1]; [3]; [1,1,1,1]; [1,1,2]; [1,2,1]; [1,3]; ...
Ordonarea se face după următoarea regulă: dacă avem două şiruri cu sumele termenilor diferite, atunci şirul cu suma termenilor mai mică se găseşte pe o poziţie mai mică.
Dacă avem două şiruri cu sumele termenilor egale atunci se compară termen cu termen şirurile până când se găseşte un termen diferit.
Şirul care are termenul mai mic se găseşte pe poziţie mai mică. Cu alte cuvinte, primul criteriu de ordonare este suma termenilor, iar în caz de egalitate, al doilea criteriu de sortare este ordinea lexicografică.
Oricărui şir i se asociază o poziţie (număr natural nenul) şi invers, oricărei poziţii i se asociază un şir.
ONI 2017, clasele 11-12
#2929
Tocmai ai primit o foaie dreptunghiulară (foarte mare) de dimensiuni N⨯M
, împărțită în pătrățele de 1⨯1
. Fiecare pătrățel este colorat pe ambele părți cu una din cele 26
de culori existente în univers, identificată pentru simplitate printr-un caracter mic al alfabetului englez.
Neavând ceva mai bun de făcut în timpul probei de baraj, te-ai gândit să înveți origami. Totuși, cum nu oricine este maestru în origami și acest sport necesită experiență și viziune artistică (lucruri pe care, bineînțeles, le vei dobândi cu timpul), ai hotărât că, pentru început, este mai interesant să împăturești foaia într-un mod clar stabilit.
Mai exact, la fiecare pas vei alege o dreaptă (orizontală sau verticală) situată între două linii (respectiv coloane) consecutive și vei “îndoi” jumătatea mai mică peste cea mare doar dacă culorile se vor suprapune perfect. Un exemplu de o astfel de îndoire validă este prezentat mai jos:
După orice îndoire vei obține un nou model (bineînțeles, de dimensiuni mai mici). În cazul în care cele două jumătăți sunt egale, ambele variante de îndoire sunt valide. Maestru în algoritmi și structuri de date eficiente, observi imediat că, după orice îndoitură, modelul rezultat va constitui o submatrice din modelul inițial. Natural, îți vine următoarea
întrebare:
“Câte submatrice distincte pot obține, îndoind foaia de un număr arbitrar de ori (sau deloc), fără a roti foaia sau a o întoarce pe cealaltă parte?”
Formal, două submatrice se consideră distincte, dacă măcar unul din cele patru colțuri diferă de la o submatrice la alta (ca indici).
ONI 2017, Baraj
#2110
În clasa lui Andrei sunt n
elevi, codificaţi cu numerele 1, 2, …, n
. Ei au fost rugaţi de către diriginta lor să propună un coleg de clasă care să devină liderul lor. Fiecare elev şi-a exprimat opţiunea scriind pe un bileţel codul său şi codul elevului ales de el pentru funcţia de şef de clasă. În acest fel diriginta a putut afla pe cine a votat fiecare elev. După studierea propunerilor venite din partea elevilor săi, diriginta lui Andrei a dorit să determine un grup cât mai numeros de elevi care s-au votat unii pe alţii. Cu alte cuvinte, pentru fiecare elev din grup să existe un membru al grupului care să-l fi votat.
Scrieţi un program care, pe baza voturilor elevilor clasei, să determine un grup cu un număr maxim de elevi pentru care voturile primite de ei provin de la elevi aparţinând aceluiaşi grup.
Olimpiada Municipala Informatica Iasi 2013