Pagini recente » Cod sursa (job #1038274) | Cod sursa (job #1147885) | Cod sursa (job #1226100) | Cod sursa (job #1593621) | Cod sursa (job #2835987)
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
/// BANANA TWIST
#include <iostream>
#include <fstream>
#include <queue>
#define pii pair <int, int>
#define LIBER 0
#define PERETE 1
#define DRAGON 2
using namespace std;
ifstream fin("barbar.in");
ofstream fout("barbar.out");
const int N = 1000;
int original[N + 1][N + 1], harta[N + 1][N + 1];
bool reach[N + 1][N + 1], n, m;
/// ordine N, E, S, V:
int diri[] = {-1, 0, 1, 0};
int dirj[] = {0, 1, 0, -1};
void clear_harta(){
for(int i = 1; i <= N; i++)
for(int j = 1; j <= N; j++)
reach[i][j] = harta[i][j] = 0;
}
bool in_bounds(int i, int j){
return (1 <= i && i <= n && 1 <= j && j <= m);
}
void dfs(pii nod){
cout << nod.first << " " << nod.second << endl;
reach[nod.first][nod.second] = true;
for(int dir = 0; dir < 4; dir++)
if(!reach[nod.first + diri[dir]][nod.second + dirj[dir]] && in_bounds(nod.first + diri[dir], nod.second + dirj[dir]) && harta[nod.first + diri[dir]][nod.second + dirj[dir]] == LIBER)
dfs({nod.first + diri[dir], nod.second + dirj[dir]});
}
int main(){
pii intrare, iesire;
cout << n << " " << m << endl;
fin >> n >> m;
char ch;
fin.get(ch); /// '\n'
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
fin.get(ch);
cout << 1 << endl;
if(ch == 'I') intrare = {i, j};
if(ch == 'O') iesire = {i, j};
if(ch == 'D') original[i][j] = DRAGON;
if(ch == '*') original[i][j] = PERETE;
}
fin.get(ch); /// '\n'
}
cout << ">>> " << intrare.first << " " << intrare.second << endl;
int st = 0, dr = N, ans = -1;
while(st <= dr){
clear_harta();
int dist = (st + dr) / 2;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
harta[i][j] = original[i][j];
for(int i = 1; i <= n; i++){
for(int j = 1; j <= m; j++){
if(original[i][j] == DRAGON){
for(int dir = 0; dir < 4; dir++){
int x = i, y = j;
for(int k = 0; k < dist; k++){
x += diri[dir];
y += dirj[dir];
if(in_bounds(x, y) && original[x][y] == LIBER) harta[x][y] = PERETE;
}
}
}
}
}
cout << " " << intrare.first << " " << intrare.second << endl;
dfs(intrare);
if(reach[iesire.first][iesire.second]) ans = dist, dr = dist + 1;
else st = dist - 1;
}
fout << ans;
return 0;
}