<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4094_-_oneout</id>
	<title>4094 - oneout - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4094_-_oneout"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4094_-_oneout&amp;action=history"/>
	<updated>2026-05-03T04:20:18Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4094_-_oneout&amp;diff=9731&amp;oldid=prev</id>
		<title>Cristina94: Pagină nouă: ==Enunţ== Definim un număr liber de pătrate ca fiind un număr natural care nu are ca divizor niciun pătrat perfect mai mare ca 1. Prin convenție, 1 este considerat liber de pătrate.  Așadar, șirul numerelor libere de pătrate este: 1,2,3,5,6,7,10,11,13,14,15,17, ...  Se consideră un șir de N numere naturale X[i], 1 ≤ i ≤ N, unde N este un număr natural. O secvență este un subșir format din numere aflate pe poziții consecutive în șirul dat. Definim o bise...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4094_-_oneout&amp;diff=9731&amp;oldid=prev"/>
		<updated>2024-03-28T11:05:43Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Enunţ== Definim un număr liber de pătrate ca fiind un număr natural care nu are ca divizor niciun pătrat perfect mai mare ca 1. Prin convenție, 1 este considerat liber de pătrate.  Așadar, șirul numerelor libere de pătrate este: 1,2,3,5,6,7,10,11,13,14,15,17, ...  Se consideră un șir de N numere naturale X[i], 1 ≤ i ≤ N, unde N este un număr natural. O secvență este un subșir format din numere aflate pe poziții consecutive în șirul dat. Definim o bise...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Enunţ==&lt;br /&gt;
Definim un număr liber de pătrate ca fiind un număr natural care nu are ca divizor niciun pătrat perfect mai mare ca 1. Prin convenție, 1 este considerat liber de pătrate.&lt;br /&gt;
&lt;br /&gt;
Așadar, șirul numerelor libere de pătrate este: 1,2,3,5,6,7,10,11,13,14,15,17, ...&lt;br /&gt;
&lt;br /&gt;
Se consideră un șir de N numere naturale X[i], 1 ≤ i ≤ N, unde N este un număr natural. O secvență este un subșir format din numere aflate pe poziții consecutive în șirul dat. Definim o bisecvență ca un subșir nevid obținut prin eliminarea dintr-o secvență a unui număr care nu este la începutul sau la sfârșitul secvenței.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
*1) Să se determine câte numere libere de pătrate conține șirul dat.&lt;br /&gt;
*2) Să se determine cea mai lungă bisecvență din șir formată din numere libere de pătrate, obținută prin eliminarea unui număr care nu este liber de pătrate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare oneout.in conține pe primul rând un număr natural C, care poate fi doar 1 sau 2, reprezentând cerința, pe a doua linie numărul natural N iar pe a treia linie N numere naturale, separate prin câte un spațiu, cu semnificația de mai sus.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Dacă C = 1, în fișierul de ieșire oneout.out se va scrie numărul de numere libere de pătrate din șir. Dacă C = 2:&lt;br /&gt;
:- pe prima linie a fișierului de ieșire oneout.out se vor scrie două numere L și K despărțite printr-un spațiu, unde L reprezintă lungimea maximă a unei bisecvențe cu proprietățile cerute, iar K reprezintă numărul de bisecvențe de lungime maximă existente în șir&lt;br /&gt;
:- pe următoarele K linii se vor scrie indicii de început și de sfârșit ai fiecărei bisecvențe de lungime maximă găsite, în ordinea crescătoare a indicelui de start, despărțite printr-un spațiu&lt;br /&gt;
:- dacă șirul nu conține nicio bisecvență cu proprietățile cerute, în fișierul de ieșire se va scrie -1.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*3 ≤ N ≤ 1.000.000&lt;br /&gt;
*2 ≤ X[i] ≤ 1.000.000, 1 ≤ i ≤ N&lt;br /&gt;
*Lungimea unei bisecvențe reprezintă numărul de numere din aceasta.&lt;br /&gt;
*Datorită dimensiunilor prea mari ale testelor, s-au adăugat doar o parte din ele&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;oneout.in&lt;br /&gt;
:1&lt;br /&gt;
:6&lt;br /&gt;
:10 2 12 7 8 15&lt;br /&gt;
&lt;br /&gt;
;oneout.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;oneout.in&lt;br /&gt;
:0&lt;br /&gt;
:5&lt;br /&gt;
:10 20 30 40 50 &lt;br /&gt;
&lt;br /&gt;
;oneout.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4094 oneout&lt;br /&gt;
def is_square_free(num):&lt;br /&gt;
  i = 2&lt;br /&gt;
  while i * i &amp;lt;= num:&lt;br /&gt;
    if num % (i * i) == 0:&lt;br /&gt;
      return False&lt;br /&gt;
    i += 1&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def count_square_free_numbers(numbers):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for num in numbers:&lt;br /&gt;
    if is_square_free(num):&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def longest_square_free_bisect(numbers):&lt;br /&gt;
  longest_length = 0&lt;br /&gt;
  current_length = 0&lt;br /&gt;
  max_length_count = 0&lt;br /&gt;
  max_length_start = -1&lt;br /&gt;
  max_length_end = -1&lt;br /&gt;
  current_start = -1&lt;br /&gt;
&lt;br /&gt;
  for i, num in enumerate(numbers):&lt;br /&gt;
    if is_square_free(num):&lt;br /&gt;
      current_length += 1&lt;br /&gt;
      if current_start == -1:&lt;br /&gt;
        current_start = i&lt;br /&gt;
    else:&lt;br /&gt;
      if current_length &amp;gt; longest_length:&lt;br /&gt;
        longest_length = current_length&lt;br /&gt;
        max_length_count = 1&lt;br /&gt;
        max_length_start = current_start&lt;br /&gt;
        max_length_end = i - 1&lt;br /&gt;
      elif current_length == longest_length:&lt;br /&gt;
        max_length_count += 1&lt;br /&gt;
      current_length = 0&lt;br /&gt;
      current_start = -1&lt;br /&gt;
&lt;br /&gt;
  if current_length &amp;gt; longest_length:&lt;br /&gt;
    longest_length = current_length&lt;br /&gt;
    max_length_count = 1&lt;br /&gt;
    max_length_start = current_start&lt;br /&gt;
    max_length_end = len(numbers) - 1&lt;br /&gt;
  elif current_length == longest_length:&lt;br /&gt;
    max_length_count += 1&lt;br /&gt;
&lt;br /&gt;
  if longest_length == 0:&lt;br /&gt;
    return -1&lt;br /&gt;
  else:&lt;br /&gt;
    return longest_length, max_length_count, max_length_start, max_length_end&lt;br /&gt;
&lt;br /&gt;
def validate_input(C, N, numbers):&lt;br /&gt;
  if C not in [1, 2]:&lt;br /&gt;
    return False&lt;br /&gt;
  if N &amp;lt; 3 or N &amp;gt; 1000000:&lt;br /&gt;
    return False&lt;br /&gt;
  if any(num &amp;lt; 2 or num &amp;gt; 1000000 for num in numbers):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;oneout.in&amp;quot;, &amp;quot;r&amp;quot;) as f_in:&lt;br /&gt;
    C = int(f_in.readline().strip())&lt;br /&gt;
    N = int(f_in.readline().strip())&lt;br /&gt;
    numbers = list(map(int, f_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
  if not validate_input(C, N, numbers):&lt;br /&gt;
    with open(&amp;quot;oneout.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
      f_out.write(&amp;quot;Date de intrare invalide.\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;oneout.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    if C == 1:&lt;br /&gt;
      result = count_square_free_numbers(numbers)&lt;br /&gt;
      f_out.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
      result = longest_square_free_bisect(numbers)&lt;br /&gt;
      if result == -1:&lt;br /&gt;
        f_out.write(&amp;quot;-1\n&amp;quot;)&lt;br /&gt;
      else:&lt;br /&gt;
        length, count, start, end = result&lt;br /&gt;
        f_out.write(f&amp;quot;{length} {count}\n&amp;quot;)&lt;br /&gt;
        for i in range(count):&lt;br /&gt;
          f_out.write(f&amp;quot;{start} {end}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      f_out.write(&amp;quot;Cerința introdusă nu este validă.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
</feed>