Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle

Problema mare cu parintii= nervi ...

switch microtik
 Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...

Crapaturi placa

cum imi accesez dosarul electroni...
 Momentul Aprilie 1964

Sursa noua - zgomot ?

A fost lansat Ubuntu 24.04 LTS

Pareri apartament in zona Berceni?
 Free streaming SkyShowtime de la ...

Skoda Fabia 1.0 TSI (110 CP)- 19 ...

Mezina familiei, Merida BigNine

The Tattooist of Auschwitz (2024)
 

[TEMA] Problema oras1 de pe .campion

- - - - -
  • This topic is locked This topic is locked
3 replies to this topic

#1
Redount2k9

Redount2k9

    Member

  • Grup: Members
  • Posts: 374
  • Înscris: 13.07.2010
Salut,
am incercat sa rezolv aceasta problema -> http://campion.edu.r...on=view&id=1360 , folosind pentru subpunctul a) o parcurgere si pentru Posted Image si c) doua functii ce fac filling. Aveam de ales daca filling-ul sa se faca simultan, folosind 2 matrici sau parcurgand de 2 ori harta initiala si dupa terminarea unui filling sa resetez matricea care continea numarul de cladiri / parcuri. Am ales prima varianta.

Sursa mea functioneaza, singura problema este ca nu iau nici un test.

Pentru primul, datele de intrare sunt:
20 20
..........C.........
..........S.........
PPPCCCCSCPSCSSCPCPSP
...SCSCSPPSPSPSPSP..
.....CSCSCSSSCCP....
..CPCSPPCCPCSSSPPCS.
......CPPSCPSPC.....
..........P.........
.......PSPSCCS......
........CPCSS.......
.SCSPPPPPPPSPSCSPSPS
SSSCPCPSPSPCSCPSPCPC
.......CCCPSCP......
........PCCPS.......
........PPPSP.......
.....PSCCPCPPCPP....
..PCPPCCPCCSSCCPCPS.
..SPSPSCSSSCSSPCCCP.
........PCSPP.......
........CPCSC.......
iar cele de iesire:
135 40 14



Ei bine, algoritmul meu afiseaza:
132 40 14

Deci functia Contur() emite 3 zone si nu stiu de ce.

Daca observati o greseala sau o omitere, postati va rog o idee.

Multumesc!




#include <fstream>
using namespace std;

ifstream fin("oras1.in");
ofstream fout("oras1.out");

#define DIM 201

int n, m;
char a[DIM][DIM];
int c[DIM][DIM];
int d[DIM][DIM];

int S[DIM * DIM / 4], Smax = -1;
int cnt, ter, ter2;

const int di[] = { -1, -1, -1, 0, 1, 1, 1, 0 };
const int dj[] = { -1, 0, 1, 1, 1, 0, -1, -1};
const int dfi[] = { -1, 0, 1, 0 };
const int dfj[] = { 0, 1, 0, -1};

void Read();

int Contur();

void FillC(int i, int j);
void FillP(int i, int j);

bool Ok(int i, int j);

void Solve2();

void Refresh();

bool IsOnContur(int i, int j);

int main()
{
Read();

fout << Contur() << ' ';
Solve2();

//fout << sizeof(a) + sizeof(c) + sizeof(d) + sizeof(S);

fin.close();
fout.close();
return 0;
}


void Refresh()
{
for ( int i = 1; i <= n; ++i )
	 for ( int j = 1; j <= m; ++j )
		 c[i][j] = 0;
}


void Solve2()
{
for ( int i = 1; i <= n; ++i )
	 for ( int j = 1; j <= m; ++j )
{
		 if ( a[i][j] == 'C' && !c[i][j] )
{
	 ter++;
	 FillC(i,j);
}

	 if ( a[i][j] == 'P' && !d[i][j] )
{
	 ter2++;
	 FillP(i,j);
}

	 }
fout << ter << ' ' << Smax << '\n';
}


void FillC(int i, int j)
{
if ( !Ok(i,j) || c[i][j] || a[i][j] != 'C' )
	 return;

c[i][j] = ter;

for ( int d = 0; d < 4; ++d )
	 FillC(i + dfi[d], j + dfj[d]);

}


void FillP(int i, int j)
{
if ( !Ok(i,j) || d[i][j] || a[i][j] != 'P' )
	 return;

d[i][j] = ter2;

S[ter2]++;

if ( S[ter2] > Smax )
	 Smax = S[ter2];

for ( int d = 0; d < 4; ++d )
	 FillP(i + dfi[d], j + dfj[d]);
}


bool Ok(int i, int j)
{

if ( i < 1 or i > n or j < 1 or j > m )
	 return false;

return true;
}


int Contur()
{

for ( int i = 1; i <= n; ++i )
	 for ( int j = 1; j <= m; ++j )
		 if ( a[i][j] == 'P' or a[i][j] == 'C' or a[i][j] == 'S' )
		 {

			 if ( IsOnContur(i,j) )

			 cnt++;

		 }

return cnt;
}

int iv, jv;

bool IsOnContur(int i, int j)
{

if ( !Ok(i,j) )
	 return false;

for ( int d = 0; d < 8; ++d )
{
	 iv = i + di[d];
	 jv = j + dj[d];
	 if (Ok(iv,jv) && a[iv][jv] == '.' )
		 return true;
}

return false;
}

void Read()
{
fin >> n >> m;
for ( int i = 1; i <= n; ++i )
	 for ( int j = 1; j <= m; ++j )
		 fin >> a[i][j];
}


Edited by Redount2k9, 02 March 2015 - 18:28.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007

Quote

a, c, d, n, m, S, cnt, ter, ter2, di, dj, dfi, dfj
Ce-s astea?

#3
Redount2k9

Redount2k9

    Member

  • Grup: Members
  • Posts: 374
  • Înscris: 13.07.2010
Variabile (fara denumiri sugestive).

#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostOriginalCopy, on 29 aprilie 2010 - 19:58, said:

Toate codurile sursa postate trebuie sa contina exclusiv identificatori (nume de variabile, functii, clase) ce reprezinta rolul entitatii identificate de catre identificator. Ex asa nu:"int n", asa da: "int dimensiune_matrice". Exceptie o constituie variabilele i, j, k atunci cand sunt folosite drept contoare.

Deschide un nou topic in care demonstrezi ca poti respecta si aceasta regula (pe langa toate celelalte).

Edited by OriginalCopy, 03 March 2015 - 08:34.


Anunturi

Chirurgia endoscopică a hipofizei Chirurgia endoscopică a hipofizei

"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală.

Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate