Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
1216 - Echer
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
Oli are un echer de forma unui triunghi dreptunghic, cu catetele de lungimi <code>L1</code> și <code>L2</code> unități, și o foaie de caiet de matematică cu <code>M</code> rânduri și <code>N</code> coloane de pătrățele având latura de o unitate. Oli a poziționat echerul în colțul din stânga sus al foii de hârtie, ca în imaginea alăturată și vrea să îl mute astfel încât să atingă colțul din dreapta jos al foii de hârtie cu oricare din colțurile echerului, utilizând doar mutări de forma: = Cerința = Scrieţi un program care citeşte lungimile catetelor echerului, numărul de rânduri, respectiv numărul de coloane ale foii de hârtie și determină: 1. numărul minim de mutări <code>K</code>, prin care poate muta echerul din colțul din stânga sus al foii de matematică, astfel încât echerul să atingă colțul din dreapta jos al foii; 2. cele <code>K</code> mutări efectuate pentru a deplasa echerul din colțul din stânga sus al foii, până când un colț al echerului atinge colțul din dreapta jos al foii; dacă există mai multe soluții, se va afișa soluția minimă în sens lexicografic. Un șir de mutări <code>X=(X<sub>1</sub>, X<sub>2</sub>, …, X<sub>K</sub>)</code> este mai mic în sens lexicografic decât alt șir de mutări <code>Y=(Y<sub>1</sub>, Y<sub>2</sub>, …, Y<sub>K</sub>)</code> dacă există <code>P</code> (<code>1 ≤ P ≤ K</code>) a.î. <code>X<sub>I</sub> = Y<sub>I</sub></code>, cu <code>I</code> din <code>{1, 2, …, P-1}</code> și <code>X<sub>P</sub> < Y<sub>P</sub></code>. De exemplu șirul de mutări <code>1 2 3 1</code> este mai mic în sens lexicografic decât șirul de mutări <code>1 2 4 1</code>. = Date de intrare = Fişierul de intrare <code>echer.in</code> conţine pe prima linie una dintre valorile <code>1</code> sau <code>2</code>, reprezentând cerinţa 1 dacă se cere determinarea numărului minim de mutări prin care poate muta echerul din colțul din stânga sus al foii de matematică astfel încât să atingă colțul din dreapta jos al foii, respectiv cerinţa 2, dacă se cere determinarea mutărilor efectuate pentru a deplasa echerul din colțul din stânga sus al foii până când un colț al echerului atinge colțul din dreapta jos al foii. A doua linie a fișierului conține patru numere naturale, separate prin câte un spațiu, reprezentând valorile <code>L1</code>, <code>L2</code>, <code>M</code> și <code>N</code>, în această ordine. = Date de ieșire = Fişierul de ieşire <code>echer.out</code> va conţine pe prima linie un număr natural <code>K</code> reprezentând numărul minim de mutări dacă cerința a fost <code>1</code>, respectiv <code>K</code> numere naturale separate prin câte un spațiu reprezentând mutările efectuate pentru a deplasa echerul din colțul din stânga sus al foii de matematică până când un colț al echerului atinge colțul din dreapta jos al foii, dacă cerința a fost <code>2</code>. = Restricții și precizări = * <code>1 ≤ L1,L2 ≤ 1000</code>. * <code>1 ≤ M,N ≤ 1000000</code>. * Se garantează că există soluție pentru orice set de date de intrare. * Pentru rezolvarea corectă a cerinţei 1 se obţine 30% din punctaj. * Pentru rezolvarea corectă a cerinţei 2 se obţine 70% din punctaj. = Exemplul 1 = <code>echer.in</code> 1 2 3 8 9 <code>echer.out</code> 8 == Încărcare soluție == === Lipește codul aici === <syntaxhighlight lang="python" line="1"> def Echer(): with open("echer.in", "r") as f: cer, l1, l2, m, n = map(int, f.readline().split()) k = 0 x = m // l1 y = n // l2 mi = min(x, y) ma = max(x, y) i = 0 if x == y: k = 3 * x - 2 elif x - y == 1: k = 3 * y - 1 elif y - x == 1: k = 3 * x - 1 else: k = 3 * mi - 2 k += 2 * (ma - mi) if (ma - mi) % 2: k -= 1 with open("echer.out", "w") as g: if cer == 1: g.write(str(k) + '\n') else: g.write("1") k -= 1 for i in range(1, mi): g.write(" 2 3 1") k -= 3 if x == y: g.write('\n') return 0 elif x - y == 1: g.write(" 4\n") return 0 elif y - x == 1: g.write(" 2\n") return 0 if x - y > 1: while k >= 4: g.write(" 4 6 3 1") k -= 4 if k: g.write(" 4\n") elif y - x > 1: while k >= 4: g.write(" 2 7 5 1") k -= 4 if k: g.write(" 2\n") return 0 </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width