Cod sursa(job #1496058)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 4 octombrie 2015 10:58:57
Problema Car Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include<fstream>
#include<string>
using namespace std;
ifstream in("car.in");
ofstream out("car.out");



const int nmax = 506, mmax = 8, dmax = 7, ymax = 4090, xmax = 2093060;
int v[nmax][nmax], vmin[mmax][nmax][nmax], car[nmax * nmax * mmax], n, m, d, sx, sy, fx, fy, sf, s;
int dir[mmax][2]={{1,0},{1,1},{0,1},{-1,1},{-1,0},{-1,-1},{0,-1},{1,-1}};
string buffer;
string::iterator buffer_it;

void add(int sx, int sy,int d,int ct){
	int i, j;
    for( i = sx, j = sy; !v[i][j] ; i += dir[d][0], j += dir[d][1])
        if(!vmin[d][i][j])
		{
            vmin[d][i][j] = ct;

            car[++sf] = (((i<<9) + j)<<3) + d;

            if((i==fx) && (j==fy))
                s = ct;
        }
}

void read_int_nn( int &x ) {
for ( ; *buffer_it>'9' || *buffer_it<'0'; ++buffer_it ) ;
for ( x= 0; *buffer_it>='0' && *buffer_it<='9'; ++buffer_it ) {
x= x*10+*buffer_it-'0';
}
}

int main (){
	int player_unu=0;

	getline(in, buffer, (char)0);
    buffer_it = buffer.begin();

    /*in>>n>>m;
    in>>sx>>sy>>fx>>fy;*/
	read_int_nn(n);
	read_int_nn(m);
	read_int_nn(sx);
	read_int_nn(sy);
	read_int_nn(fx);
	read_int_nn(fy);
    for(int i = 0;i <=n + 1; i++)
        for(int j = 0; j<=m + 1; j++)
            v[i][j] = 1;

    for(int i = 1; i<=n; i++)
        for(int j = 1; j<=m; j++)
            read_int_nn(v[i][j]);

	sf = -1;
    for(int i = 0; i<mmax; i++)
        add(sx, sy, i, 1);

    for(int q = 0; (q<=sf) && (!s); q++)
	{
        int i = car[q]>>12;
        int j = (car[q]&ymax)>>3;

        d = car[q] & dmax;

        add(i, j, (d + 1) % mmax, vmin[d][i][j] + 1);
        add(i, j, (d + mmax - 1) % mmax, vmin[d][i][j] + 1);
    }

    s--;
    out<<s<<'\n';

    return player_unu;
}