<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Zadaca Piano"]]></title>
		<link>http://mendo.mk/jforum/posts/list/7.page</link>
		<description><![CDATA[Latest messages posted in the topic "Zadaca Piano"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Zadaca Piano</title>
				<description><![CDATA[ Raboti na 6/20. Ne znam kade pravam greska. Kje mi pomogne nekoj?<br /> [code]#include &lt;bits/stdc++.h&gt;<br /> <br /> using namespace std;<br /> <br /> typedef long long ll;<br /> typedef pair&lt;int,int&gt; pi;<br /> int n,m;<br /> char mat[51][51];<br /> bool vis[51][51];<br /> vector&lt;pair&lt;int,int&gt; &gt; v1,v2,v3,e;<br /> int di[4]={0,0,-1,1};<br /> int dj[4]={1,-1,0,0};<br /> <br /> bool valid_move(int i, int j)<br /> {<br />     if(i&lt;0 || i&gt;=n || j&lt;0 || j&gt;=m || mat[i][j]=='#')return false; // dali e ok potegot<br />     return true;<br /> }<br /> <br /> bool to_the_end(vector&lt;pi&gt; v)<br /> {<br /> <br />     for(int i=0; i&lt;v.size(); i++)<br />     {<br />         if(v[i].first==e[i].first && v[i].second==e[i].second)continue; // dali stignav do F-s<br />         else return false;<br />     }<br />     return true;<br /> }<br /> int bfs(vector&lt;pi&gt; start,vector&lt;pi&gt; end)<br /> {<br />     for(int i=0; i&lt;n; i++)<br />     {<br />         for(int j=0; j&lt;m; j++)<br />         {<br />             vis[i][j]=false;<br />         }<br />     }<br />     queue&lt;vector&lt;pair&lt;int,int&gt; &gt; &gt; q;<br />     vector&lt;pair&lt;int,int&gt; &gt; v5;<br />     for(pi curr :start)<br />     {<br />         int i=curr.first;<br />         int j=curr.second;  //mu pravi true na site od pocetniot klavir<br />         vis[i][j]=true;<br />         v5.push_back({i,j});<br />     }<br />     q.push(v5);<br />     queue&lt;int&gt; cekor;<br />     cekor.push(0);<br />     while(!q.empty())<br />     {<br />         vector&lt;pi&gt; v=q.front();<br />         q.pop();<br />         int c=cekor.front();<br />         cekor.pop();<br />         if(to_the_end(v))return c; // ako stignav do kraj<br />         for(int k=0; k&lt;4; k++)<br />         {<br />             vector&lt;pi&gt; nov;<br />             bool flag=false;<br />             for(int z=0; z&lt;v.size(); z++)<br />             {<br />                 nov.push_back({v[z].first+di[k],v[z].second+dj[k]}); // go pomestuva cel objekt na nekoja nasoka<br />                 if(vis[v[z].first+di[k]][v[z].second+dj[k]]==true)flag=true;<br />             }<br />             bool can=true;<br />             for(int z=0; z&lt;nov.size(); z++)<br />             {<br />                 if(!valid_move(nov[z].first,nov[z].second)) // proveruva dali validna nasokata<br />                 {<br />                     can=false;<br />                     break;<br />                 }<br />             }<br />             if(can && !flag)<br />             {<br />                 q.push(nov);<br />                 cekor.push(c+1);<br />                 for(int i=0; i&lt;nov.size(); i++)<br />                 {<br />                     vis[nov[i].first][nov[i].second]=true; // ako moze go zemam vektorot<br />                 }<br />             }<br />         }<br />     }<br />     return -1;<br /> <br /> }<br /> int main()<br /> {<br />     cin&gt;&gt;n&gt;&gt;m;<br />     for(int i=0; i&lt;n; i++)<br />     {<br />         for(int j=0; j&lt;m; j++)<br />         {<br /> <br />             cin&gt;&gt;mat[i][j];<br />             if(mat[i][j]=='1')<br />             {<br />                 v1.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='2')<br />             {<br />                 v2.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='3')<br />             {<br />                 v3.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='F')<br />             {<br />                 e.push_back({i,j});<br />             }<br />         }<br />     }<br />     vector&lt;int&gt; res;<br />     res.push_back(bfs(v1,e));<br />     if(v2.size()&gt;0)res.push_back(bfs(v2,e));<br />     if(v3.size()&gt;0)res.push_back(bfs(v3,e));<br />     int ret=1000000;<br />     int type=1;<br />     for(int i=0; i&lt;res.size(); i++)<br />     {<br />         if(res[i]==0  || res[i]==-1)continue;<br />         if(res[i]&lt;ret)<br />         {<br />             ret=res[i];<br />             type=i+1;<br />         }<br />     }<br />     if(ret==1000000)cout&lt;&lt;-1&lt;&lt;endl;<br />     else cout&lt;&lt;type&lt;&lt;endl&lt;&lt;ret&lt;&lt;endl;<br />     return 0;<br /> }<br /> [/code]]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/708/3836.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/708/3836.page</link>
				<pubDate><![CDATA[Thu, 20 Jun 2019 16:53:05]]> GMT</pubDate>
				<author><![CDATA[ BATIR]]></author>
			</item>
			<item>
				<title>Zadaca Piano</title>
				<description><![CDATA[ [quote=BATIR]Raboti na 6/20. Ne znam kade pravam greska. Kje mi pomogne nekoj?[/quote]<br /> <br /> Кога рагледуваш некое пиано, треба да одбереш едно негово поле (на пример, она кое е најлево и најдолу) и тоа да го користиш за означување на посетените локации во vis[][].<br /> <br /> Инаку, замисли го овој пример:<br /> [code]2 5<br /> 11.FF<br /> 11.FF[/code]<br /> <br /> <br /> Твоето решение нема да може воопшто да тргне надесно, бидејќи ги имаш означено сите 4 полиња кои се наоѓаат лево за посетени.<br /> Еве го твојот код со споменатите поправки (сега работи на сите тест случаи):<br /> [code]#include &lt;bits/stdc++.h&gt;<br />  <br /> using namespace std;<br />  <br /> typedef long long ll;<br /> typedef pair&lt;int,int&gt; pi;<br /> int n,m;<br /> char mat[51][51];<br /> bool vis[51][51];<br /> vector&lt;pair&lt;int,int&gt; &gt; v1,v2,v3,e;<br /> int di[4]={0,0,-1,1};<br /> int dj[4]={1,-1,0,0};<br />  <br /> bool valid_move(int i, int j)<br /> {<br />     if(i&lt;0 || i&gt;=n || j&lt;0 || j&gt;=m || mat[i][j]=='#')return false; // dali e ok potegot<br />     return true;<br /> }<br />  <br /> bool to_the_end(vector&lt;pi&gt; v)<br /> {<br />  <br />     for(int i=0; i&lt;v.size(); i++)<br />     {<br />         if(v[i].first==e[i].first && v[i].second==e[i].second)continue; // dali stignav do F-s<br />         else return false;<br />     }<br />     return true;<br /> }<br /> int bfs(vector&lt;pi&gt; start,vector&lt;pi&gt; end)<br /> {<br />     for(int i=0; i&lt;n; i++)<br />     {<br />         for(int j=0; j&lt;m; j++)<br />         {<br />             vis[i][j]=false;<br />         }<br />     }<br />     queue&lt;vector&lt;pair&lt;int,int&gt; &gt; &gt; q;<br />     vector&lt;pair&lt;int,int&gt; &gt; v5;<br />     int min_first = 100000000, min_second = 100000000;<br />     for(pi curr :start)<br />     {<br />         int i=curr.first;<br />         int j=curr.second;  //mu pravi true na site od pocetniot klavir<br />         v5.push_back({i,j});<br />  <br />         min_first = min(min_first, curr.first);<br />         min_second = min(min_second, curr.second);<br />     }<br />  <br />     vis[min_first][min_second] = true;<br />      <br />     q.push(v5);<br />     queue&lt;int&gt; cekor;<br />     cekor.push(0);<br />     while(!q.empty())<br />     {<br />         vector&lt;pi&gt; v=q.front();<br />         q.pop();<br />         int c=cekor.front();<br />         cekor.pop();<br />  <br />         if(to_the_end(v))return c; // ako stignav do kraj<br />         for(int k=0; k&lt;4; k++)<br />         {<br />             vector&lt;pi&gt; nov;<br />             int min_first = 100000000, min_second = 100000000;<br />             for(int z=0; z&lt;v.size(); z++)<br />             {<br />                 nov.push_back({v[z].first+di[k],v[z].second+dj[k]}); // go pomestuva cel objekt na nekoja nasoka<br />                 min_first = min(min_first, v[z].first+di[k]);<br />                 min_second = min(min_second, v[z].second+dj[k]);<br />             }<br />             bool can=true;<br />             for(int z=0; z&lt;nov.size(); z++)<br />             {<br />                 if(!valid_move(nov[z].first,nov[z].second)) // proveruva dali validna nasokata<br />                 {<br />                     can=false;<br />                     break;<br />                 }<br />             }<br />  <br />             bool flag = (vis[min_first][min_second]==true);<br />  <br />             if(can && !flag)<br />             {<br />                 q.push(nov);<br />                 cekor.push(c+1);<br />                 for(int i=0; i&lt;nov.size(); i++)<br />                 {<br />                     vis[min_first][min_second]=true; // ako moze go zemam vektorot<br />                 }<br />             }<br />         }<br />     }<br />     return -1;<br />  <br /> }<br /> int main()<br /> {<br />     cin&gt;&gt;n&gt;&gt;m;<br />     for(int i=0; i&lt;n; i++)<br />     {<br />         for(int j=0; j&lt;m; j++)<br />         {<br />  <br />             cin&gt;&gt;mat[i][j];<br />             if(mat[i][j]=='1')<br />             {<br />                 v1.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='2')<br />             {<br />                 v2.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='3')<br />             {<br />                 v3.push_back({i,j});<br />             }<br />             else if(mat[i][j]=='F')<br />             {<br />                 e.push_back({i,j});<br />             }<br />         }<br />     }<br />     vector&lt;int&gt; res;<br />     res.push_back(bfs(v1,e));<br />     if(v2.size()&gt;0)res.push_back(bfs(v2,e)); else res.push_back(-1);<br />     if(v3.size()&gt;0)res.push_back(bfs(v3,e)); else res.push_back(-1);<br />     int ret=1000000;<br />     int type=1;<br />     for(int i=0; i&lt;res.size(); i++)<br />     {<br />         if(res[i]==0  || res[i]==-1)continue;<br />         if(res[i]&lt;ret)<br />         {<br />             ret=res[i];<br />             type=i+1;<br />         }<br />     }<br />     if(ret==1000000)cout&lt;&lt;-1&lt;&lt;endl;<br />     else cout&lt;&lt;type&lt;&lt;endl&lt;&lt;ret&lt;&lt;endl;<br />     return 0;<br /> }[/code]]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/708/3837.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/708/3837.page</link>
				<pubDate><![CDATA[Thu, 20 Jun 2019 19:23:09]]> GMT</pubDate>
				<author><![CDATA[ longhi]]></author>
			</item>
			<item>
				<title>Zadaca Piano</title>
				<description><![CDATA[ Fala mnogu☺️]]></description>
				<guid isPermaLink="true">http://mendo.mk/jforum/posts/preList/708/3838.page</guid>
				<link>http://mendo.mk/jforum/posts/preList/708/3838.page</link>
				<pubDate><![CDATA[Thu, 20 Jun 2019 22:57:22]]> GMT</pubDate>
				<author><![CDATA[ BATIR]]></author>
			</item>
	</channel>
</rss>