<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Forum Pasja Informatyki - Najnowsze z tagiem codeforces</title>
<link>https://forum.pasja-informatyki.pl/tag/codeforces</link>
<description>Powered by Question2Answer</description>
<item>
<title>Max median 1486a codeforces</title>
<link>https://forum.pasja-informatyki.pl/592042/max-median-1486a-codeforces</link>
<description>

&lt;p&gt;Cześć,
&lt;br&gt;
próbuję rozwiązać zadanie z codeforces : &lt;a href=&quot;https://codeforces.com/problemset/problem/1486/D&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/1486/D&lt;/a&gt; .
&lt;br&gt;
Jednak patrząc na rozwiązanie i&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
using namespace std;

int main() {
    int n, k;
    cin &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;
    vector&amp;lt;int&amp;gt; a(n);
    for (auto &amp;amp;i : a) cin &amp;gt;&amp;gt; i;
    int l = 1, r = n + 1;
    while (r - l &amp;gt; 1) {
        int m = (l + r) / 2;
        vector&amp;lt;int&amp;gt; b(n);
        for (int i = 0; i &amp;lt; n; ++i)
            if (a[i] &amp;gt;= m) {
                b[i] = 1;
            } else {
                b[i] = -1;
            }
        for (int i = 1; i &amp;lt; n; ++i) b[i] += b[i - 1];
        int mx = b[k - 1];
        int mn = 0;
        for (int i = k; i &amp;lt; n; ++i) {
            mn = min(mn, b[i - k]);
            mx = max(mx, b[i] - mn);
        }
        if (mx &amp;gt; 0) {
            l = m;
        } else {
            r = m;
        }
    }
    cout &amp;lt;&amp;lt; l &amp;lt;&amp;lt; '\n';
    return 0;
}&lt;/pre&gt;



&lt;p&gt;sprawdzając wynik kodu dla przypadku:
&lt;br&gt;
3 3
&lt;br&gt;
3 4 4
&lt;br&gt;

&lt;br&gt;
wynik wynosi w kodzie organizatora konkursu 3.
&lt;br&gt;
Czy mógłby mi ktoś wytłumaczyć dlaczego tak jest?&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/592042/max-median-1486a-codeforces</guid>
<pubDate>Sun, 10 Mar 2024 16:39:32 +0000</pubDate>
</item>
<item>
<title>C. Success Rate - Codeforces</title>
<link>https://forum.pasja-informatyki.pl/590836/c-success-rate-codeforces</link>
<description>

&lt;p&gt;Witam,
&lt;br&gt;
Próbuje to rozwiązać:&amp;nbsp;&lt;a href=&quot;https://codeforces.com/problemset/problem/807/C&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/807/C&lt;/a&gt;
&lt;br&gt;

&lt;br&gt;
Ale nie przychodzi mi nic do głowy co wpasowywałoby się w wymagania co do złożoności, konkretnie logarytmicznej.&lt;/p&gt;



&lt;p&gt;Namachałem&amp;nbsp;funkcję do sprawdzenia czy konkretna liczba może rozwiązuje problem, wygląda tak:&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
long long GCD(long long a, long long b) {
	if (b == 0)
		return a;

	return GCD(b, a % b);
}

long long LCM(long long a, long long b) {
	return (a * b) / GCD(a, b);
}

bool check(int x, int y, int p, int q, int k) {
	int left = 0;
	int right = k;

	while (left &amp;lt;= right) {
		long long wins = (1LL * left + right) / 2;

		long long x2 = x + wins;
		long long y2 = y + k;

		long long lcm = LCM(y2, q);
		x2 = x2 * (lcm / y2);
		y2 = lcm;

		long long p2 = p;
		long long q2 = q;

		p2 = p2 * (lcm / q2);
		q2 = lcm;

		if (x2 == p2 &amp;amp;&amp;amp; y2 == q2)
			return true;
		else if (x2 &amp;gt; p2)
			right = wins - 1;
		else
			left = wins + 1;
	}

	return false;
}&lt;/pre&gt;



&lt;p&gt;Czyli sprowadzam liczby do wspólnego mianownika dodając konkretną ilość wygranych do ogółu, używając binary searcha. Potem używam tej funkcji check w pętli O(y) i pokolei sprawdzam każdą możliwą liczbę. Nie dość, że to nie zawsze działa, to jeszcze jest za wolne. Jakieś pomysły?
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/590836/c-success-rate-codeforces</guid>
<pubDate>Sun, 21 Jan 2024 13:27:42 +0000</pubDate>
</item>
<item>
<title>B. Math - Codeforces</title>
<link>https://forum.pasja-informatyki.pl/590317/b-math-codeforces</link>
<description>

&lt;p&gt;Witam,
&lt;br&gt;
Takie oto zadanko:
&lt;br&gt;
&lt;a href=&quot;https://codeforces.com/problemset/problem/1062/B&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/1062/B&lt;/a&gt;
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;p&gt;Zalicza mi testy do 9, wtedy się wywala, input = 786432. Output powinien być równy 6 6, a mój kod daje odpowiedź 6 9. Rozumiem, że coś jest źle z moim podejściem, bo nawet nie mogę sobie wyobrazić jak do tego wyniku 6 6 mam dojść. Oto kod:
&lt;br&gt;
&amp;nbsp;&lt;/p&gt;



&lt;pre class=&quot;brush:cpp;&quot;&gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;cmath&amp;gt;
#include &amp;lt;map&amp;gt;

using namespace std;

map&amp;lt;int, int&amp;gt; factorize(int n) {
	vector&amp;lt;int&amp;gt; sieve(n + 1, 1);
	sieve[0] = sieve[1] = 0;

	for (int i = 2; i &amp;lt;= n; ++i) {
		if (sieve[i] != 1)
			continue;

		for (long long j = 1LL * i * i; j &amp;lt;= n; j += i) {
			sieve[j] = i;
		}
	}

	if (sieve[n] == 1)
		return { {1, 1}, {n, 1} };

	map&amp;lt;int, int&amp;gt; prime_factors;
	while (sieve[n] &amp;gt; 1) {
		++prime_factors[sieve[n]];
		n /= sieve[n];
	}

	++prime_factors[n];
	return prime_factors;
}

vector&amp;lt;int&amp;gt; solve(int n) {
	map&amp;lt;int, int&amp;gt; prime_factors = factorize(n);
	vector&amp;lt;int&amp;gt; result(2);
	result[0] = 1;

	int max_exp = 0;
	bool can_sqrt = true;
	for (const pair&amp;lt;const int, int&amp;gt;&amp;amp; factor : prime_factors) {
		max_exp = max(max_exp, factor.second);

		if ((factor.second &amp;amp; 1) != 0)
			can_sqrt = false;

		result[0] *= factor.first;
	}

	if (!can_sqrt) {
		++result[1];

		// We can align maximum exponent in one step (while aligning others exponents to be even), so check if its needed
		if ((max_exp &amp;amp; 1) != 0)
			++max_exp;
	}

	while (max_exp &amp;gt; 1) {
		if ((max_exp &amp;amp; 1) == 0) {
			max_exp /= 2;
		}
		else {
			++max_exp;
		}

		++result[1];
	}

	return result;
}

int main()
{
	int n;
	cin &amp;gt;&amp;gt; n;

	vector&amp;lt;int&amp;gt; result = solve(n);
	cout &amp;lt;&amp;lt; result[0] &amp;lt;&amp;lt; &quot; &quot; &amp;lt;&amp;lt; result[1];
}&lt;/pre&gt;



&lt;p&gt;Idea jest taka: znaleźć rozkład na liczby pierwsze, i jeśli się da to pierwiastkować, a jeśli nie to mnożyć (żeby w każdej potędze jej wykładnik był równy najwyższemu wykładnikowi ze wszystkich obecnych w rozkładzie na liczby pierwsze). Pierwiastek kwadratowy to jest wykładnik 1/2, więc dziele moje wszystkie wykładniki na 2. W ten sposób dochodzę w końcu do wykładnika 1, iloczyn tych liczb to moja minimalna liczba, a ilość operacji zliczam w trakcie.
&lt;br&gt;
Coś takiego:
&lt;br&gt;
&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=4631161955626733526&quot; style=&quot;height:449px; width:573px&quot;&gt;
&lt;br&gt;
Tak, widzę pattern, pewnie można kod mocno skrócić, ale na razie to zostawmy skoro jest przypadek dla którego to nie działa.
&lt;br&gt;

&lt;br&gt;
W jaki inny sposób mógłbym liczyć minimalną liczbę&amp;nbsp;operacji?&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/590317/b-math-codeforces</guid>
<pubDate>Sun, 31 Dec 2023 14:14:53 +0000</pubDate>
</item>
<item>
<title>E. Max to the Right of Min Codeforces</title>
<link>https://forum.pasja-informatyki.pl/586920/e-max-to-the-right-of-min-codeforces</link>
<description>

&lt;p&gt;Próbuję już 2 dzień dobić zadanie z poprzedniego cf-a:&amp;nbsp;&amp;nbsp;&lt;a href=&quot;https://codeforces.com/contest/1849/problem/E&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/contest/1849/problem/E&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Wydaje mi się, że mam pomysł w O(N lg N). Robię dziel i rządź i jak mam zmienne l,p,s oznaczające lewy_wsk zapytania, prawy_wsk zapytania i środek, to muszę zliczyć ile jest przedziałów, że l &amp;lt;= s, p &amp;gt;= s oraz min jest po lewej stronie. No to rozważam dwoma for-ami przypadki, że l = s a drugi p = s, żeby mieć, że l &amp;lt; s oraz p &amp;gt; s no i tu mam problem:&lt;/p&gt;



&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://forum.pasja-informatyki.pl/?qa=blob&amp;amp;qa_blobid=4377088097316927094&quot; style=&quot;height:234px; width:600px&quot;&gt;&lt;/p&gt;



&lt;p&gt;Jak się potem wywołuję rekurencyjnie na l+1, s-1 oraz s+1, p-1, to nie rozważam takiego czerwonego przedziału. Kompletnie nie wiem jak to uwzględnić. Bo ogólnie robię tak, że przesuwam lewy wskaźnik forem, a prawy pcham dopóki min_l &amp;lt; min_p i max-y wrzucam na deque, żeby wiedzieć ile ich jest, ale nwm jak ten przypadek rozważyć.&lt;/p&gt;



&lt;p&gt;Z góry dziękuję za pomoc i poświęcony czas!&lt;/p&gt;</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/586920/e-max-to-the-right-of-min-codeforces</guid>
<pubDate>Sat, 29 Jul 2023 11:43:04 +0000</pubDate>
</item>
<item>
<title>Zadane The BOSS Can Count Pairs Codeforces</title>
<link>https://forum.pasja-informatyki.pl/585550/zadane-the-boss-can-count-pairs-codeforces</link>
<description>Mam problem z takim zadaniem: &lt;a href=&quot;https://codeforces.com/problemset/problem/1830/B&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/1830/B&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Nie wiem jak zrobić szybciej niż O(N^2). Zastanawiałem się nad sqrt, ale nic nie wymyśliłem. Bardzo byłbym wdzięczny za hinta.&lt;br /&gt;
&lt;br /&gt;
Z góry dzięki!</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/585550/zadane-the-boss-can-count-pairs-codeforces</guid>
<pubDate>Tue, 06 Jun 2023 19:00:45 +0000</pubDate>
</item>
<item>
<title>zadanie na bs z codeforces</title>
<link>https://forum.pasja-informatyki.pl/584446/zadanie-na-bs-z-codeforces</link>
<description>Witam,&lt;br /&gt;
&lt;br /&gt;
Próbuję rozwiązać zadanie &lt;a href=&quot;https://codeforces.com/problemset/problem/1736/C1&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/1736/C1&lt;/a&gt;. Pisze, że to jeden z problemów na binary search. Czy dałby radę mi ktoś powiedzieć jakie jest rozwiązanie z użyciem binary searcha oraz jak polecacie uczyć się tych różnych technik np. binary search to gdzie najlepiej waszym zdaniem rozwiązywać zadania.&lt;br /&gt;
&lt;br /&gt;
Z góry bardzo dziękuję</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/584446/zadanie-na-bs-z-codeforces</guid>
<pubDate>Wed, 03 May 2023 07:44:27 +0000</pubDate>
</item>
<item>
<title>Traffic light - codeforces</title>
<link>https://forum.pasja-informatyki.pl/584359/traffic-light-codeforces</link>
<description>Hej,&lt;br /&gt;
&lt;br /&gt;
Rozwiązuję to zadanie : &lt;a href=&quot;https://codeforces.com/problemset/problem/1744/C&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/1744/C&lt;/a&gt;. Ma ktoś może pomysł na rozwiązanie tego? Moje rozwiązanie niestety jest za wolne.</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/584359/traffic-light-codeforces</guid>
<pubDate>Mon, 01 May 2023 10:36:24 +0000</pubDate>
</item>
<item>
<title>Podejście z binary searchem.</title>
<link>https://forum.pasja-informatyki.pl/584349/podejscie-z-binary-searchem</link>
<description>Witam, rozwiązałem zadanie : &lt;a href=&quot;https://codeforces.com/problemset/problem/919/B&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/problemset/problem/919/B&lt;/a&gt; , z brutem ale chociaż tak. Patrząc na tagi pisze tam, że jednym z rozwiązań jest binary search. Chciałbym wiedzieć jak zoptymalizować operacje, i rozwiązać to przez binary search'a. Czy wiecie może jak by to podejść?</description>
<category>C i C++</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/584349/podejscie-z-binary-searchem</guid>
<pubDate>Sun, 30 Apr 2023 21:02:20 +0000</pubDate>
</item>
<item>
<title>Zadanie distance in the tree Codeforces</title>
<link>https://forum.pasja-informatyki.pl/583537/zadanie-distance-in-the-tree-codeforces</link>
<description>Mam problem z takim zadaniem: &lt;a href=&quot;https://codeforces.com/contest/161/problem/D&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;https://codeforces.com/contest/161/problem/D&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Nie wiem jak je zrobić innaczej niż w O(N^2) puszczając się z każdego wierzchołka DFS-em / BFS-em. Pewnie wejdzie coś w O(N*K), może np. jakiś dynamik, tylko nie wiem jak to zrobić.&lt;br /&gt;
&lt;br /&gt;
Z góry dziękuję za pomoc i poświęcony czas!</description>
<category>Algorytmy</category>
<guid isPermaLink="true">https://forum.pasja-informatyki.pl/583537/zadanie-distance-in-the-tree-codeforces</guid>
<pubDate>Sun, 09 Apr 2023 13:40:23 +0000</pubDate>
</item>
</channel>
</rss>