Afişează mesaje
|
Pagini: [1]
|
5
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 258 Alpin
|
: Decembrie 27, 2014, 14:20:33
|
Imi poate spune cineva de ce iau 0 pe toate testele (pe 3 iau TLE) ?
#include <fstream> #include <queue>
using namespace std;
ifstream fin("alpin.in"); ofstream fout("alpin.out");
#define Dim 1024 #define INF 16384
short imin, jmin, imax, jmax; short n, a[Dim][Dim], c[Dim][Dim], minim = INF, maxim = -16384; const short di[] = { -1, 0, 1, 0 }; const short dj[] = { 0, 1, 0, -1 }; queue<pair<int, int> >Q;
void Read(); void Lee(); bool OK(int i, int j); void Write(int i, int j);
int main() { Read(); Lee(); fout << maxim << '\n'; Write( imax, jmax ); fout << imax << ' ' << jmax << '\n'; fin.close(); fout.close(); return 0; }
void Write(int i, int j) { if ( i == imin && j == jmin ) return; if ( c[j-1] == c[j] - 1 && OK(i,j-1) ) { Write(i, j - 1); fout << i << ' ' << j - 1 << '\n'; } else if ( c[i-1][j] == c[j] - 1 && OK(i-1,j) ) { Write( i - 1, j); fout << i - 1 << ' ' << j << '\n'; } else if ( c[j+1] == c[j] - 1 && OK(i,j+1) ) { Write(i, j + 1 ); fout << i << ' ' << j + 1 << '\n'; } else if ( c[i+1][j] == c[j] - 1 && OK(i+1,j) ) { Write(i + 1, j); fout << i + 1 << ' ' << j << '\n'; } }
void Lee() { int i, j, iv, jv; Q.push({imin,jmin}); c[imin][jmin] = 1; while ( !Q.empty() ) { i = Q.front().first; j = Q.front().second; Q.pop(); for ( int d = 0; d < 4; ++d ) { iv = i + di[d]; jv = j + dj[d]; if ( OK(iv, jv) && a[iv][jv] > a[j] ) { c[iv][jv] = c[j] + 1; Q.push({iv,jv}); if ( c[iv][jv] > maxim ) { maxim = c[iv][jv]; imax = iv, jmax = jv;} // retinem coord drumului maxim } } } }
bool OK(int i, int j) { if ( i < 1 or i > n or j < 1 or j > n ) return false; return true; }
void Read() { fin >> n; for ( int i = 1; i <= n; ++i ) for ( int j = 1; j <= n; ++j ) { fin >> a[j]; c[j] = INF; if ( a[j] < minim ) // cautam punctul de plecare { minim = a[j]; // adica minimul din matrice imin = i; // retinem coordonatele jmin = j; } } }
|
|
|
8
|
infoarena - concursuri, probleme, evaluator, articole / Probleme externe / Problema usoara, dar cu batai de cap.
|
: Noiembrie 08, 2013, 16:41:57
|
Enunt:
Fie a si b doua numere intregi. Scrieti un algoritm care sa verifice daca numerele a si b sunt consecutive.
Incercare:
#include <iostream> using namespace std; int main() { int a,b; cout<<"Dati a= "; cin>>a; cout<<"Dati b= "; cin>>b; if (a+1=b)cout<<"Numerele sunt consecutive"; else cout<<"Numerele nu sunt consecutive"; return 0; }
Eroarea aparuta: lvalue required as left operand of assignment
Ma puteti ajuta? Multumesc anticipat.
|
|
|
|