4018 - Mos Craciun 3: Difference between revisions

From Bitnami MediaWiki
Pop Giulia (talk | contribs)
Pagină nouă: Enunt Cunoscutul programator Văndămel are la dispoziție o matrice binară cu <code>n</code> linii (numerotate de la <code>1</code> la <code>n</code>) și <code>m</code> coloane (numerotate de la <code>1</code> la <code>m</code>). Văndămel poate efectua, de câte ori e posibil, următoarea operație: alege două poziții vecine pe linie sau pe coloană și care conțin ambele valoarea <code>1</code> și le transformă în <code>0</code>. De exemplu, în matricea: <code>...
 
Pop Giulia (talk | contribs)
No edit summary
Line 1: Line 1:
Enunt
==Cerința==
Moș Crăciun este pregătit să ofere cadouri tuturor copiilor. Singura lui problema este Grinch, care încearcă să deschidă seiful cu cadouri al lui Moș Crăciun. Grinch a aflat codul, așa că Moș Craciun a decis să îl schimbe cu unul nou. Presupunem că parola seifului este n și avem 2 numere, p și k. Moș Craciun va inversa primele p cifre și ultimele k cifre ale parolei – parola este formată numai din cifre nenule. Fiind foarte bătrân și greșind mult la calcule, vă roagă să îl ajutați să determine noua parola.


Cunoscutul programator Văndămel are la dispoziție o matrice binară cu <code>n</code> linii (numerotate de la <code>1</code> la <code>n</code>) și <code>m</code> coloane (numerotate de la <code>1</code> la <code>m</code>). Văndămel poate efectua, de câte ori e posibil, următoarea operație: alege două poziții vecine pe linie sau pe coloană și care conțin ambele valoarea <code>1</code> și le transformă în <code>0</code>. De exemplu, în matricea:
==Date de intrare==
Programul citește de la tastatură numerele n p k.


<code>0 1 1 0</code>
==Date de ieșire==
Programul va afișa pe ecran noul cod.


<code>1 1 0 0</code>
==Restricții și precizări==
 
1 ≤ n < 1000000000000000000
<code>1 0 0 0</code>
dacă n nu are cel puțin p+k cifre, se va afișa mesajul imposibil.
 
==Exemplu:==
<code>0 1 1 0</code>
 
el poate alege valorile de <code>1</code> de la pozițiile vecine <code>(1,2)</code> și <code>(2,2)</code>, le transformă în <code>0</code> și obține matricea:
 
<code>0 0 1 0</code>
 
<code>1 0 0 0</code>
 
<code>1 0 0 0</code>
 
<code>0 1 1 0</code>
 
= Cerința =
Văndămel știe să rezolve orice problemă, dar vrea să vadă dacă știți și voi să aflați numărul maxim posibil de operații care se pot efectua pe matricea dată.
 
= Date de intrare =
Programul citește de la tastatură numerele <code>n</code> și <code>m</code> și de pe următoarele <code>n</code> linii câte <code>m</code> numere binare reprezentând valorile din matrice.
 
= Date de ieșire =
Programul va afișa pe ecran un singur număr natural reprezentând numărul maxim posibil de operații care se pot aplica asupra matricei.
 
= Restricții și precizări =
 
* <code>1 ≤ n, m ≤ 100</code>
 
= Exemplul 1: =
Intrare
Intrare
4 4
0 1 1 0
1 1 0 0
1 0 0 0
0 1 1 0
Ieșire
3
=== Explicație ===
Se efectuează operațiile la <code>(2,1)</code> și <code>(3,1)</code>, la <code>(1,2)</code> și <code>(2,2)</code> și la <code>(4,2)</code> și <code>(4,3)</code>. După efectuarea celor <code>3</code> operații matricea arată astfel:
<code>0 0 1 0</code>


<code>0 0 0 0</code>
1428429 2 3
 
<code>0 0 0 0</code>
 
<code>0 0 0 0</code>
 
= Exemplul 2: =
Intrare
5 4
0 1 0 0
0 1 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Ieșire
Ieșire
1


== Încărcare soluție ==
4128924
==Încărcare soluție==
<syntaxhighlight lang="python" line>
n, p, k = input().split()
n = int(n)
p = int(p)
k = int(k)
if len(str(n)) < p + k:
    print("imposibil")
    exit()
n_str = str(n)
n_str = n_str[:p][::-1] + n_str[p:]
n_str = n_str[:-k] + n_str[-k:][::-1]
new_n = int(n_str)
print(new_n)
</syntaxhighlight>

Revision as of 10:07, 30 April 2023

Cerința

Moș Crăciun este pregătit să ofere cadouri tuturor copiilor. Singura lui problema este Grinch, care încearcă să deschidă seiful cu cadouri al lui Moș Crăciun. Grinch a aflat codul, așa că Moș Craciun a decis să îl schimbe cu unul nou. Presupunem că parola seifului este n și avem 2 numere, p și k. Moș Craciun va inversa primele p cifre și ultimele k cifre ale parolei – parola este formată numai din cifre nenule. Fiind foarte bătrân și greșind mult la calcule, vă roagă să îl ajutați să determine noua parola.

Date de intrare

Programul citește de la tastatură numerele n p k.

Date de ieșire

Programul va afișa pe ecran noul cod.

Restricții și precizări

1 ≤ n < 1000000000000000000 dacă n nu are cel puțin p+k cifre, se va afișa mesajul imposibil.

Exemplu:

Intrare

1428429 2 3 Ieșire

4128924

Încărcare soluție

<syntaxhighlight lang="python" line> n, p, k = input().split() n = int(n) p = int(p) k = int(k) if len(str(n)) < p + k:

   print("imposibil")
   exit()

n_str = str(n) n_str = n_str[:p][::-1] + n_str[p:] n_str = n_str[:-k] + n_str[-k:][::-1] new_n = int(n_str) print(new_n) </syntaxhighlight>