Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Contestare amenda politia locala

PC se restarteaza cu erori ecran ...

Mercedes atego 815 oprire motor

Ce contine Creion rani dupa ras?
 Filtru sedimente inainte de pompa?

Paște fericit!

electrician constructor video curs

Cum pot bloca transferul de date ...
 Ce reprezinta in chimie abrevieri...

Google pay ma taxeaza in timp ce ...

Kia Picanto 2022 - Problema motor?

Durere umar AC Joint
 Care este cea mai sanatoasa paine?

Zgomot ritmic ce urmeaza rotirea ...

Merita Lumix FZ82 in 2024?

Nu pot activa Memory Integrity
 

[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,254
  • Î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

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

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