Pagini recente » Cod sursa (job #3261843) | Cod sursa (job #1906430) | Cod sursa (job #1287432) | Cod sursa (job #3131156) | Cod sursa (job #895816)
Cod sursa(job #895816)
using namespace std;
#include<iostream>
#include<fstream>
ifstream f("barbar.in");
ofstream g("barbar.out");
int m[1005][1005];
int xu,y,xnou,ynou,r,k,xfinal,yfinal,t,n;
int l[1000001], c[1000001],l2[1000001], c2[1000001];
int dx[]={-1, 0, 1, 0}, dy[]={0, 1, 0, -1};
bool chemare=true;
int lee(int j)
{
k=1; int i; bool ok=false;;
if(chemare==false)
j=-j;
for(i=1; i<=k; i++)
{
xu=l2[i]; y=c2[i];
for(t=0; t<4; t++)
{
xnou = xu+dx[t];
ynou = y+dy[t];
if((m[xnou][ynou]>=j)==chemare)
{
if(m[xnou][ynou]==1000001&&chemare)
ok=true;
else if(m[xnou][ynou]==-1000001&&!chemare)
ok=true;
m[xnou][ynou]=(-m[xnou][ynou]);
k++;
l2[k]=xnou;
c2[k]=ynou;
}
}
}
chemare=!chemare;
if(ok==false)
return 0;
else
return 1;
}
int search(int st, int dr)
{
int mid=(st+dr)/2;
if(lee(mid))
if(mid==dr)
return mid;
else
return search(mid, dr);
else
if(st==mid)
return mid;
else
return search(st, mid);
}
int main()
{
int i,j;
char a;
f>>n>>r;
for(i=1; i<=n; i++)
for(j=1; j<=r; j++)
{
f>>a;
if(a=='D')
{
m[i][j]=0;
k++;
l[k]=i;
c[k]=j;
}
if(a=='*')
{ ; }
if(a=='.')
{ m[i][j]=-1;}
if(a=='I')
{
l2[1]=i;
c2[1]=j;
}
if(a=='O')
{
xfinal=i;
yfinal=j;
}
}
for(i=1; i<=k; i++)
{
xu=l[i]; y=c[i];
for(t=0; t<4; t++)
{
xnou = xu+dx[t];
ynou = y+dy[t];
if(m[xnou][ynou]==-1)
{
m[xnou][ynou]=m[xu][y]+1;
k++;
l[k]=xnou;
c[k]=ynou;
}
}
}
m[xfinal][yfinal]=1000001;
g<<search(1, 1000000);
}