Documente Academic
Documente Profesional
Documente Cultură
Important
A. Sursa clasică
#include <fstream>
using namespace std;
const int DMAX = 500;
ifstream fin("lee.in");
ofstream fout("lee.out");
// Vectorii de deplasare
const int addLin[] = {-1, 0, 1, 0};
const int addCol[] = {0, 1, 0, -1};
#include <bits/stdc++.h>
using namespace std;
const int DMAX = 500;
ifstream fin("lee.in");
ofstream fout("lee.out");
// Vectorii de deplasare
const int addLin[] = {-1, 0, 1, 0};
const int addCol[] = {0, 1, 0, -1};
struct Pos {
int lin, col;
};
int m, n, mat[DMAX][DMAX];
Pos a, b;
queue<Pos> q;
// Subprogramul de citire a datelor din fișier
void citeste() {
fin >> m >> n;
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
fin >> mat[i][j];
fin >> a.lin >> a.col; fin >> b.lin >> b.col;
}
// Subprogramul de a înconjura obstacolele
void inconjoara() {
for (int i = 0; i <= m + 1; i++)
mat[i][0] = mat[i][n + 1] = -1;
for (int j = 1; j <= n; j++)
mat[0][j] = mat[m + 1][j] = -1;
}
void lee() {
q.push(a);
mat[a.lin][a.col] = 1;
while (!q.empty() && !mat[b.lin][b.col]) {
Pos pos = q.front();
q.pop();
for (int k = 0; k < 4; k++) {
Pos ngh;
ngh.lin = pos.lin + addLin[k];
ngh.col = pos.col + addCol[k];
if (!mat[ngh.lin][ngh.col]) {
mat[ngh.lin][ngh.col] = mat[pos.lin][pos.col] + 1;
q.push(ngh);
}
}
}
Subgrupa 1
1) Ana si Ion au o pasiune comuna pentru sah si joaca ori de câte ori au
timp liber. Fiind persoane non-conformiste, si-au comandat table de sah
de diferite dimensiuni, si seturi de piese speciale. Daca nu au timp sa
termine o partida, pastreaza pe tabla de sah piesele asa cum sunt si
continua a doua zi. De data aceasta, a aparut o problema - Ionel, fiul lor,
a rasturnat din greseala tabla de sah - si ei încearca sa reconstituie acum
ultima configuratie. Ion îsi aminteste cu precizie cu arata ieri la începutul
jocului configuratia tablei de sah, precum si mutarile pe care el le-a facut.
Ana îsi aminteste ca a jucat ciudat - tot jocul a mutat aceeasi piesa, o
tura. Nu îsi aminteste exact pozitiile în care a mutat, dar îsi aminteste
directiile în care s-a deplasat tura. Scrieti un program care sa determine
pozitiile în care s-ar putea afla la final tura mutata de Ana.
2) Eternul si fascinantul teren de lupta dintre cei doi protagonisti celebri,
pisica si soarecele, este din nou in atentia soricelului. Acesta studiaza
harta curtii pentru a gasi o modalitate de deplasare prin curte cat mai
lipsita de pericole. Harta este un dreptunghi de dimensiuni intregi m x n,
impartit in celule patrate de latura 1; o celula este precizata printr-o
pereche de numere intregi - numarul liniei si numarul coloanei in care se
gaseste (liniile si coloanele sunt numerotate incepand de la 1). Pe harta
sunt insemnate celulele in care pisica obisnuieste sa stea la panda.
Gradul de periculozitate al unei celule este in functie de distanta pana la
cel mai apropiat punct de panda al pisicii, mai exact este lungimea curtii
+ latimea curtii - distanta pana la cel mai apropiat punct de panda.
Gradul de periculozitate al unui drum este dat de suma gradelor de
periculozitate ale celulelor traversate. Atat soricelul cat si pisica se pot
deplasa de la o celula la una invecinata pe orizontala sau verticala, iar
distanta dintre doua celule este data de numarul minim de celule
traversate intr-o deplasare de la o celula la cealalta minus 1. De exemplu
distanta dintre celulele (1,1) si (2,2) este 2. Scrieti un program care
determina un drum de la celula (1,1) - coltul stanga-sus, la celula (m,n) -
coltul dreapta-jos cu gradul de periculozitate minim.
Problema Panda
O rezervaţie de urşi panda, privită de sus,
are formă dreptunghiulară şi este
compusă din n rânduri identice, iar pe
fiecare rând sunt m ţarcuri identice cu
baza pătrată. Ţarcurile sunt îngrădite şi
sunt prevăzute cu uşi către toate cele 4
ţarcuri vecine. Uşile sunt prevăzute cu
câte un cod de acces, ca atare acestea se
închid şi se deschid automat.
Prin acest sistem, unele ţarcuri sunt accesibile ursuleţilor, iar altele
le sunt interzise acestora. În T ţarcuri se găseşte mâncare pentru ursuleţi.
Ursuleţii din rezervaţie poartă câte un microcip care le deschide automat
uşile ţarcurilor unde pot intra şi închide automat uşile ţarcurilor interzise.
Un ţarc este accesibil ursuleţului dacă ultimele S cifre ale reprezentărilor
binare ale codului ţarcului şi ale codului K de pe microcip sunt
complementare.
Exemplu:
pentru S=8, 11101011 şi 00010100 sunt complementare.
Problema Lanterna
Un agent secret are o harta pe care sunt marcate N obiective
militare. El se afla, initial, langa obiectivul numerotat cu 1 (baza
militara proprie) si trebuie sa ajunga la obiectivul numerotat cu N (baza
militara inamica). Pentru aceasta, el va folosi drumurile existente,
fiecare drum legand 2 obiective distincte.
Fiind o misiune secreta, deplasarea
agentului va avea loc noaptea; de aceea, el
are nevoie de o lanterna. Pentru aceasta, el
are de ales intre K tipuri de lanterne - o
lanterna de tipul W (1 ≤ W ≤ K) are baterii
care permit consumul a W watti; dupa
consumul acestor watti, lanterna nu mai
lumineaza. Din fericire, unele dintre obiective
sunt baze militare prietene, astfel ca, o data
ajuns acolo, el isi poate reincarca complet
bateriile. Agentul trebuie sa aiba grija ca,
inainte de merge pe un drum intre doua
obiective, cantitatea de watti pe care o mai
poate consuma sa fie mai mare sau egala cu
cantitatea de watti pe care o va consuma pe drumul respectiv.
Cunoscand drumurile dintre obiective si, pentru fiecare drum,
durata necesara parcurgerii drumului si numarul de watti consumati de
lanterna, determinati tipul de lanterna cu numarul cel mai mic, astfel
incat durata deplasarii sa fie minima (sa presupunem ca acest tip este
W; aceasta inseamna ca daca ar alege o lanterna de un tip mai mic
decat W, durata deplasarii ar fi strict mai mare, iar daca ar alege o
lanterna de un tip mai mare decat W, durata deplasarii ar fi mai mare
sau egala).