Pagini recente » Cod sursa (job #2586074) | Cod sursa (job #1402831) | Cod sursa (job #1756152) | Cod sursa (job #15938) | Cod sursa (job #389550)
Cod sursa(job #389550)
#include <fstream>
using namespace std;
ifstream in("robot.in");
ofstream out("robot.out");
int m,n,x[32][32],len,i,num,j,sol;
unsigned long k,l;
int main()
{
in>>m>>n;
for(i=1; i<=m; i++)
{
in>>k;
if(!k)
continue;
len = 0;
l = 1;
len=1;
while((l<<1)<=k)
{l<<=1;len++;}
if(len>n)
k>>=(len-n);
for(j=n; j>=1; j--)
{
if(k%2)
num++;
x[i][j] = k%2;
k/=2;
}
}
out<<num<<'\n';
// cazul 0 - fara schimbare de directie
if(m==1 || n==1)
{
if(num==0)
out<<0;
else
out<<-1;
return 0;
}
// cazul 1 - directie dreapta-sus
sol=1;
for(i=1; i<=n&/ i++)
if(x[1][i])
sol=0;
for(i=1; i<=m&/ i++)
if(x[i][n])
sol=0;
if(sol)
{out<<1<<' '<<n;return 0;}
// cazul 2 - directia stanga-jos
sol=1;
for(i=1; i<=m; i++)
if(x[i][1])
sol=0;
for(i=1; i<=n; i++)
if(x[m][i])
sol=0;
if(sol)
{out<<m<<' '<<1;return 0;}
// cazul 3 - doua directii, prima stanga
sol=0;
for(i=2; i<n && !x[1][i] && !sol; i++)
{
sol=1;
for(j=2; j<=m; j++)
if(x[j][i])
{sol=0;break;}
}
if(sol)
{out<<1<<' '<<i-1<<' '<<m<<' '<<i-1;return 0;}
// cazul 4 - doua directii, prima jos
sol=0;
for(i=2; i<m && !x[i][1] && !sol; i++)
{
sol=1;
for(j=2; j<=n; j++)
if(x[i][j])
{sol=0;break;}
}
if(sol)
{out<<i-1<<' '<<1<<' '<<i-1<<' '<<n;return 0;}
// cazul 5 - nu avem solutie
out<<-1;
return 0;
}