Afişează mesaje
|
Pagini: [1]
|
13
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 064 Cobai
|
: Ianuarie 19, 2014, 03:28:24
|
Nu reusesc sa-mi dau seama unde gresesc. imi puteti spune unde gresesc?
Cod :
#include <fstream> #include <queue> #include <iomanip> #include <string> using namespace std;
ifstream is("cobai.in"); ofstream os("cobai.out");
int n,m,SP1,SP2; char x[51][51]; string s; float Rooms,PossibleRooms,Result;
queue<pair<int,int> > Q; queue<pair<int,int> > Q2;
void Input(); void BF();
int main() { Input(); BF(); Result = (PossibleRooms)*100/Rooms; os << setprecision(4) << Result;
return 0; }
void Input() { is >> n >> m; for ( int i = 1; i <= n; ++i ) for ( int j = 1; j <= m; ++j ) { is >> x[j]; if ( x[j] == '*' ) { Q.push(make_pair(i,j)); SP1 = i; SP2 = j; x[j] = '+'; } if ( x[j] == '.') Rooms++; } is >> s; }
void BF() { int ki,kj,ip,jp; for ( int i = 0; i < s.size(); ++i ) { if ( s == 'N' ) ki = -1, kj = 0; if ( s == 'E' ) ki = 0, kj = 1; if ( s == 'S' ) ki = 1, kj = 0; if ( s == 'V' ) ki = 0, kj = -1; int l = 0; PossibleRooms = 0; while ( !Q.empty() ) { l = 0; ip = Q.front().first; jp = Q.front().second; if ( ip != SP1 || jp != SP2 ) x[ip][jp] = '.'; Q.pop(); while ( 1 != 0 ) { ip += ki; jp += kj; l = 1; if ( ip >= 1 && ip <= n && jp >= 1 && jp <= m && x[ip][jp] == '.' ) { Q2.push(make_pair(ip,jp)); x[ip][jp] = '*';
} else break; } } while ( !Q2.empty() ) { Q.push(make_pair(Q2.front().first,Q2.front().second)); Q2.pop(); PossibleRooms++; } } }
|
|
|
15
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 824 Insule
|
: Iulie 10, 2013, 12:44:36
|
nu inteleg, imi da exact ca in exemplu si iau 0,rezolvarea cred ca este buna ...am trimis si pe evaluatorul de pe campion.edu.ro,si acolo la exemplu 0 puncte,chiar daca imi da exact la fel. Uitati-va va rog peste cod si spuneti-mi ce sa fac: #include <cstdio> #define MAX 101 using namespace std; int x[MAX][MAX], a[MAX][MAX]; int n,m,size,max(-9999),R,G,B; int d1[] = { -1, 0, 1, 0}; int d2[] = { 0, 1, 0, -1 }; int minim(999999); bool ok(int i, int j) { if ( a [j] != 0 ) return false; if ( i < 1 || j < 1 || i > m || j > m) return false; return true; }
void lee() { int k(4); int v1,v2;bool modif = true; while ( modif ) { modif = false; for ( int i = 1; i <= n; i++) for ( int j = 1; j <= m; j++ ) if ( a[j] == k) { for ( int d = 0; d < 4; d++ ) { v1 = i + d1[d]; v2 = j + d2[d]; if ( ok(v1,v2) ) { a[v1][v2] = k+1; modif = true; } }
} k++; } }
struct pozitie{ int linie; int coloana; };
void fill(int i,int j,int k) { if ( x[j] == 1) { x[j]=k; size++; if ( x[i-1][j] == 1) fill(i-1,j,k); if ( x[i+1][j] == 1) fill(i+1,j,k); if ( x[j-1] == 1) fill(i,j-1,k); if ( x[j+1] == 1) fill(i,j+1,k);
} if ( x[j] == 2) { x[j]=k; size++; if ( x[i-1][j] == 2) fill(i-1,j,k); if ( x[i+1][j] == 2) fill(i+1,j,k); if ( x[j-1] == 2) fill(i,j-1,k); if ( x[j+1] == 2) fill(i,j+1,k);
} if ( x[j] == 3) { x[j]=k; size++; if ( x[i-1][j] == 3) fill(i-1,j,k); if ( x[i+1][j] == 3) fill(i+1,j,k); if ( x[j-1] == 3) fill(i,j-1,k); if ( x[j+1] == 3) fill(i,j+1,k);
} }
int main() { char c;int d; pozitie p1[100]; pozitie p2[100]; FILE * pFile; pFile = fopen("insule.in", "r"); fscanf(pFile,"%d%d\n", &n,&m); for ( int i = 1; i <= n ; i++ ) { for ( int j = 1 ; j <= m; j++ ) { fscanf(pFile,"%c",&c); x[j] = c - '0'; a[j] = c - '0'; } fprintf(pFile,"\n"); } int k = 3; for ( int i = 1; i <= n; i++ ) for ( int j = 1; j <= m; j++ ) if ( x[j] == 1 || x[j] == 2 || x[j] == 3 ) { k++; if ( x[j] == 1) R++; if ( x[j] == 2) G++; if ( x[j] == 3) B++; size = 0; fill(i,j,k ); if ( size > max ) max = size; } int o = 0; int p = 0; int j1,j2; for ( int i = 1; i <= n; i++ ) for ( int j = 1; j <= m; j++ ) { if ( a[j] == 0 ) { if ( a[i-1][j] == 1 || a[i+1][j] == 1 || a[j-1] == 1 || a[j+1] == 1) { p1 p1 j1 = i; j2 = j; a[j1][j2] = 4; o++; } if ( a[i-1][j] == 2 || a[i+1][j] == 2 || a[j-1] == 2 || a[j+1] == 2) { p2[p].linie = i; p2[p].coloana = j; p++; } } } lee(); int f,g; for ( int j = 0; j < p ; j++ ) { f = p2[j].linie; g = p2[j].coloana; if ( a[f][g] < minim && a[f][g] != 0) minim = a[f][g]; } minim -= 3; pFile = fopen("insule.out", "w"); fprintf(pFile, "%i %i %i %i" ,R,G,B,minim);
return 0; }
|
|
|
|