<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Startup"]]></title>
		<link>http://mendo.mk/jforum/posts/list/7.page</link>
		<description><![CDATA[Latest messages posted in the topic "Startup"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Startup</title>
				<description><![CDATA[ [code]<br /> #include &lt;iostream&gt;<br /> #include &lt;vector&gt;<br /> #include &lt;algorithm&gt;<br /> using namespace std;<br /> vector&lt;int&gt;arr;<br /> void leftRotatebyOne() <br /> { <br />     int temp = arr[0], i; <br />     for (i = 0; i &lt; arr.size() - 1; i++) <br />         arr[i] = arr[i + 1]; <br />   <br />     arr[i] = temp; <br />     <br />     return;<br /> } <br /> void count_positive_rotations()<br /> {<br /> 	int good_rotations=0;<br /> 	for(int j=0;j&lt;arr.size();j++)<br /> 	{<br /> 		int sum=arr[0];<br /> 		bool good_rotation=true;<br /> 		if(sum&lt;0)<br /> 			good_rotation=false;<br /> 		else<br /> 		{<br /> 			for(int i=1;i&lt;arr.size();i++)<br /> 			{<br /> 				if(sum+arr[i]&gt;=0)<br /> 				sum+=arr[i];<br /> 				else{<br /> 				good_rotation=false;<br /> 				break;<br /> 				}<br /> 			}<br /> 		}<br /> 		if(good_rotation)<br /> 		good_rotations++;<br /> 		<br /> 		leftRotatebyOne();<br /> 	}<br /> 	<br /> 		<br /> 	cout&lt;&lt;good_rotations&lt;&lt;endl;<br /> 	return;<br /> }<br /> int main()<br /> {<br /> 	int N;<br /> 	cin&gt;&gt;N;<br /> 	for(int i=0;i&lt;N;i++)<br /> 	{<br /> 		int a;<br /> 		cin&gt;&gt;a;<br /> 		arr.push_back(a);<br /> 	}<br /> 	count_positive_rotations();<br /> 	<br /> 	return 0;<br /> }[/code]<br /> ????? ?? ?????? ?? ?????? 8 ????????, ?? ?????????? ?? ???? ?? ?????, ???? ?? ?? ???????]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/707/3834.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/707/3834.page</link>
				<pubDate><![CDATA[Sun, 16 Jun 2019 21:19:43]]> GMT</pubDate>
				<author><![CDATA[ MODDI]]></author>
			</item>
			<item>
				<title>Startup</title>
				<description><![CDATA[ [quote=MODDI]Кодов ми работи на првите 8 случаеви, на останатите ми паѓа на време, како да го убрзам кодов?[/quote]<br /> Твојот алгоритам има преголема сложеност. Оваа задача може да се реши во линеарно време O(N). Така да, не може секогаш да се "убрза" некој почнат код, и треба да се внимава да направиме анализа на алгоритамот пред да почнеме да решаваме (за да не изгубиме време на пишување на решение кое нема да освои онолку поени колку што очекуваме, па да почнеме од почеток со куцање на нешто друго).<br /> <br /> Е сега, во однос на задачата. Размисли дали можеме да пресметаме неколку работи однапред, за да не ги правиме при секоја ротација. Еве еден начин како може да се реши задачава со тој пристап:<br /> &nbsp; &nbsp;  Нека имаме низа frontSum[i] која што ни го памети збирот на првите i броеви - т.е. A[1] + A[2] + A[3] + ... + A[i].<br /> &nbsp; &nbsp;  Нека имаме низа backSum[i] која што ни го памети збирот на сите броеви од i-тиот до N-тиот - т.е. A[i] + A[i+1] + ... + A[N]<br /> &nbsp; &nbsp;  Нека имаме низа frontMin[i] која што го памети најмалиот збир од последователни броеви завршувајќи со i - т.е. min(A[1], A[1]+A[2], ... A[1] + A[2] + ... + A[i])<br /> &nbsp; &nbsp;  Нека имаме низа backMin[i] која што го памети најмалиот збир од последователни броеви почнувајќи со i - т.е. min(A[i], A[i]+A[i+1], A[i]+A[i+1]+A[i+2], ...)<br /> <br /> <br /> Со овие низи, проверките се доста едноставни за секоја ротација. На пример, ако решиме да ја разгледуваме i-тата ротација (онаа која почнува со i-тиот број), треба само да провериме дали се исполнети овие два услови:<br /> &nbsp; &nbsp;  1) backMin[i] &gt;= 0    (со ова го проверуваме потребниот услов за сите броеви од i-тиот до N-тиот, т.е. дали A[i] &gt;= 0, дали A[i] + A[i+1] &gt;= 0, итн)<br /> &nbsp; &nbsp;  2) backSum[i] + frontMin[i-1] &gt;= 0    (ако ротацијата почнува од i-тиот елемент, тогаш таа по броевите A[i], A[i+1], ... A[N] ќе заврши со броевите A[1], A[2], А[i-1], па со овој чекор го проверуваме условот за тие следни броеви. Види како истиот е сличен на првиот, но додаваме backSum[i]).<br /> <br /> За првата ротација не мора да го проверуваме вториот услов, бидејќи таму нема прелевање (т.е. броевите се A[1], A[2], ... A[N]). Еве и код ако уште не е јасно:<br /> <br /> [code]#include &lt;bits/stdc++.h&gt;<br /> using namespace std;<br /> <br /> int main() {<br /> <br />     int N;<br />     cin &gt;&gt; N;<br /> <br />     vector&lt;long long&gt; A(N + 1);<br />     for (int i=1; i&lt;=N; i++) {<br />         cin &gt;&gt; A[i];<br />     }<br /> <br /> <br />     long long frontSum[N+1], frontMin[N+1];<br />     frontSum[0] = 0; frontMin[0] = 1000000000000000LL;<br /> <br />     for (int i=1; i&lt;=N; i++) {<br />         frontSum[i] = frontSum[i-1] + A[i];<br />         frontMin[i] = min(frontMin[i-1], frontSum[i]);<br />     }<br /> <br />     long long backSum[N+1], backMin[N+1];<br />     backSum[N] = A[N]; backMin[N] = A[N];<br /> <br />     for (int i=N-1; i&gt;=1; i--) {<br />         backSum[i] = A[i] + backSum[i+1];<br />         backMin[i] = min(A[i], A[i] + backMin[i+1]);<br />     }<br /> <br /> <br />     int counter = 0;<br />     if (backMin[1] &gt;= 0) {<br />         counter++;<br />     }<br /> <br />     for (int i=2; i&lt;=N; i++) {<br />         if ((backMin[i] &gt;= 0) && (backSum[i] + frontMin[i-1] &gt;= 0)) {<br />             counter++;<br />         }<br />     }<br /> <br />     cout &lt;&lt; counter &lt;&lt; endl;<br />     return 0;<br /> }[/code]]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/707/3835.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/707/3835.page</link>
				<pubDate><![CDATA[Wed, 19 Jun 2019 14:27:16]]> GMT</pubDate>
				<author><![CDATA[ longhi]]></author>
			</item>
	</channel>
</rss>