<?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=3758_-_inno</id>
	<title>3758 - inno - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3758_-_inno"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3758_-_inno&amp;action=history"/>
	<updated>2026-05-01T07:44:15Z</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=3758_-_inno&amp;diff=9061&amp;oldid=prev</id>
		<title>Miawinator: Pagină nouă: Se dau numerele naturale &lt;code&gt;n&lt;/code&gt; și &lt;code&gt;k&lt;/code&gt;, precum și un șir &lt;code&gt;a[1]&lt;/code&gt;, &lt;code&gt;a[2]&lt;/code&gt; ,…, &lt;code&gt;a[n]&lt;/code&gt; de numere naturale nenule. Din șir de poate elimina o singură secvență (eventual vidă) &lt;code&gt;a[i]&lt;/code&gt;, &lt;code&gt;a[i+1]&lt;/code&gt;, …, &lt;code&gt;a[j]&lt;/code&gt; astfel că în șir rămân elementele &lt;code&gt;a[1]&lt;/code&gt;, &lt;code&gt;a[2]&lt;/code&gt;, …, &lt;code&gt;a[i-1]&lt;/code&gt;, &lt;code&gt;a[j+1]&lt;/code&gt;, …, &lt;code&gt;a[n]&lt;/code&gt;.  De exemplu, din șirul &lt;code&gt;a=(1,2,...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3758_-_inno&amp;diff=9061&amp;oldid=prev"/>
		<updated>2024-01-05T02:39:28Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Se dau numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, precum și un șir &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt; ,…, &amp;lt;code&amp;gt;a[n]&amp;lt;/code&amp;gt; de numere naturale nenule. Din șir de poate elimina o singură secvență (eventual vidă) &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[i+1]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[j]&amp;lt;/code&amp;gt; astfel că în șir rămân elementele &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[i-1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[j+1]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[n]&amp;lt;/code&amp;gt;.  De exemplu, din șirul &amp;lt;code&amp;gt;a=(1,2,...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Se dau numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, precum și un șir &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt; ,…, &amp;lt;code&amp;gt;a[n]&amp;lt;/code&amp;gt; de numere naturale nenule. Din șir de poate elimina o singură secvență (eventual vidă) &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[i+1]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[j]&amp;lt;/code&amp;gt; astfel că în șir rămân elementele &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[i-1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[j+1]&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a[n]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De exemplu, din șirul &amp;lt;code&amp;gt;a=(1,2,3,4,5,7)&amp;lt;/code&amp;gt; se poate elimina secvența &amp;lt;code&amp;gt;3,4,5&amp;lt;/code&amp;gt; și rămâne &amp;lt;code&amp;gt;1,2,7&amp;lt;/code&amp;gt;; sau se poate elimina secvența vidă și rămâne șirul inițial &amp;lt;code&amp;gt;1,2,3,4,5,7&amp;lt;/code&amp;gt;; sau se poate elimina &amp;lt;code&amp;gt;1,2,3,4&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;5,7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După eliminarea secvenței, elementele rămase formează un șir inno dacă aplicându-se operația &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; pe biți asupra lor rezultatul este un număr care are cel puțin &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; în baza &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. De exemplu, dacă &amp;lt;code&amp;gt;a=(1,2,3,4,5,7)&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k=2&amp;lt;/code&amp;gt;, atunci prin eliminarea secvenței &amp;lt;code&amp;gt;1,2,3,4&amp;lt;/code&amp;gt; rămân elementele &amp;lt;code&amp;gt;5,7&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;5 &amp;amp; 7 = 5&amp;lt;/code&amp;gt;, care are &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; în baza &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. Dar dacă se elimină secvența &amp;lt;code&amp;gt;3,4,5&amp;lt;/code&amp;gt; atunci rămân elementele &amp;lt;code&amp;gt;1,2,7&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;1 &amp;amp; 2 &amp;amp; 7 = 0&amp;lt;/code&amp;gt;, deci nu este șir inno.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se determine în câte moduri se poate elimina o secvență astfel încât elementele rămase să formeze șir inno.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;. Pe linia a doua se află &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale reprezentând elementele șirului.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt; va conține pe prima linie un singur număr natural reprezentând numărul de moduri de a elimina o secvență astfel încât șirul rămas să fie inno.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ n ≤ 200.000&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ 29&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
input.txt:&lt;br /&gt;
&lt;br /&gt;
4 2&lt;br /&gt;
&lt;br /&gt;
10 7 5 15&lt;br /&gt;
&lt;br /&gt;
output.txt:&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
Explicație:&lt;br /&gt;
&lt;br /&gt;
Modalitățile sunt:&lt;br /&gt;
&lt;br /&gt;
- se elimină &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;7 5 15&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;7 &amp;amp; 5 &amp;amp; 15 = 5&amp;lt;/code&amp;gt;, care are &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- se elimină &amp;lt;code&amp;gt;10 7&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;5 15&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;5 &amp;amp; 15 = 5&amp;lt;/code&amp;gt;, care are &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- se elimină &amp;lt;code&amp;gt;10 7 5&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; are &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- se elimină &amp;lt;code&amp;gt;7 5&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;10 15&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;10 &amp;amp; 15 = 10&amp;lt;/code&amp;gt; are &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- se elimină &amp;lt;code&amp;gt;7 5 15&amp;lt;/code&amp;gt; și rămâne șirul &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; are &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
input.txt:&lt;br /&gt;
&lt;br /&gt;
5 4&lt;br /&gt;
&lt;br /&gt;
7 7 6 1 62&lt;br /&gt;
&lt;br /&gt;
output.txt:&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
Explicație:&lt;br /&gt;
&lt;br /&gt;
Singura posibilitate este eliminarea secvenței &amp;lt;code&amp;gt;7 7 6 1&amp;lt;/code&amp;gt;. Rămâne doar numărul &amp;lt;code&amp;gt;62&amp;lt;/code&amp;gt;, care are &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; biți de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
input.txt:&lt;br /&gt;
&lt;br /&gt;
999999999999 4&lt;br /&gt;
&lt;br /&gt;
7 7 6 1 62&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
Invalid input constraints.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verify_constraints(n, k):&lt;br /&gt;
    if not (3 &amp;lt;= n &amp;lt;= 200000 and 1 &amp;lt;= k &amp;lt;= 29):&lt;br /&gt;
        print(&amp;quot;Invalid input constraints.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
def count_bit(v):&lt;br /&gt;
    v = v - ((v &amp;gt;&amp;gt; 1) &amp;amp; 0x55555555)&lt;br /&gt;
    v = (v &amp;amp; 0x33333333) + ((v &amp;gt;&amp;gt; 2) &amp;amp; 0x33333333)&lt;br /&gt;
    c = ((v + (v &amp;gt;&amp;gt; 4) &amp;amp; 0xF0F0F0F) * 0x1010101) &amp;gt;&amp;gt; 24&lt;br /&gt;
    return c&lt;br /&gt;
&lt;br /&gt;
def bsearch(p, u, key, k):&lt;br /&gt;
    m = 0&lt;br /&gt;
    while p &amp;lt; u:&lt;br /&gt;
        m = (p + u) // 2&lt;br /&gt;
        if dr[m] &amp;amp; key &amp;lt; k:&lt;br /&gt;
            p = m + 1&lt;br /&gt;
        else:&lt;br /&gt;
            u = m&lt;br /&gt;
&lt;br /&gt;
    m = (p + u) // 2&lt;br /&gt;
    if dr[m] &amp;amp; key &amp;lt; k:&lt;br /&gt;
        m += 1&lt;br /&gt;
    return m&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;input.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;output.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    n, k = map(int, fin.readline().split())&lt;br /&gt;
    verify_constraints(n,k)&lt;br /&gt;
    a = [0] + list(map(int, fin.readline().split()))&lt;br /&gt;
    st = [0] * (n + 1)&lt;br /&gt;
    dr = [0] * (n + 1)&lt;br /&gt;
    x = -1&lt;br /&gt;
    y = 0&lt;br /&gt;
    val = 0&lt;br /&gt;
    sol = 0&lt;br /&gt;
&lt;br /&gt;
    st[1] = a[1]&lt;br /&gt;
    dr[n] = a[n]&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        st[i] = st[i - 1] &amp;amp; a[i]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n - 1, 0, -1):&lt;br /&gt;
        dr[i] = dr[i + 1] &amp;amp; a[i]&lt;br /&gt;
&lt;br /&gt;
    if count_bit(st[1]) &amp;lt; k:&lt;br /&gt;
        x = 0&lt;br /&gt;
&lt;br /&gt;
    if count_bit(dr[n]) &amp;lt; k:&lt;br /&gt;
        y = n + 1&lt;br /&gt;
&lt;br /&gt;
    if x &amp;lt; 0:&lt;br /&gt;
        x = 1&lt;br /&gt;
        i = 2&lt;br /&gt;
        while i &amp;lt;= n:&lt;br /&gt;
            if count_bit(st[i]) &amp;gt;= k:&lt;br /&gt;
                x = i&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
    if not y:&lt;br /&gt;
        y = n&lt;br /&gt;
        i = n - 1&lt;br /&gt;
        while i &amp;gt;= 1:&lt;br /&gt;
            if count_bit(dr[i]) &amp;gt;= k:&lt;br /&gt;
                y = i&lt;br /&gt;
            i -= 1&lt;br /&gt;
&lt;br /&gt;
    if x == n:&lt;br /&gt;
        fout.write(str(n * (n + 1) // 2))&lt;br /&gt;
    elif x == 0 and y == n + 1:&lt;br /&gt;
        fout.write(&amp;quot;0&amp;quot;)&lt;br /&gt;
    elif 1 &amp;lt;= x &amp;lt; n and y == n + 1:&lt;br /&gt;
        fout.write(str(x))&lt;br /&gt;
    elif x == 0 and 1 &amp;lt; y &amp;lt;= n:&lt;br /&gt;
        fout.write(str(n - y + 1))&lt;br /&gt;
    elif x == 0 and y == 0:&lt;br /&gt;
        fout.write(&amp;quot;1&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        sol = n - y + 1&lt;br /&gt;
        for i in range(1, x + 1):&lt;br /&gt;
            val = bsearch(y, n, st[i], k)&lt;br /&gt;
            sol += (n - val + 2)&lt;br /&gt;
&lt;br /&gt;
        fout.write(str(sol))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Miawinator</name></author>
	</entry>
</feed>