Afişează mesaje
|
|
Pagini: [1]
|
|
2
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 480 Ecuatii 2
|
: Februarie 12, 2016, 15:52:00
|
Nu reusesc sa imi dau seama unde gresesc. Iau doar 30 de puncte. Ma chinui de 2 ore sa vad, am facut 2 sesiuni de debugging cap-coada, tot nu imi dau seama.  #include <iostream> #include <fstream> #include <string> #include <iomanip>
std::ifstream fin("ecuatii2.in"); std::ofstream fout("ecuatii2.out");
int n; std::string stanga, dreapta; double xStanga = 0, xDreapta = 0, nrStanga = 0, nrDreapta = 0;
void rezolva(std::string sir, double &nrSir, double &xSir) { int aux = 0, semn = 1; for (int i = 0; i < sir.length(); i++) { if (sir[i] == '+') { nrSir += (aux * semn); semn = 1; aux = 0; } else if (sir[i] == '-') { nrSir += (aux * semn); semn = -1; aux = 0; } else if (sir[i] == 'x') { if (aux > 0) xSir += (aux * semn); else if (aux == 0) xSir += 1; aux = 0; } else { aux = aux * 10 + (sir[i] - '0'); } } if (sir[sir.length() - 1] != 'x') nrSir += aux; }
void afiseaza() { if (xStanga == xDreapta) { if (nrStanga == nrDreapta) fout << "infinit\n"; else fout << "imposibil\n"; } else { fout << std::setprecision(5) << ((nrDreapta - nrStanga) / (xStanga - xDreapta)) << "\n"; }
}
int main(int argc, char *argv[]) { fin >> n; std::getline(fin, stanga, '\n'); for (int numarEcuatii = 1; numarEcuatii <= n; numarEcuatii++) { std::getline(fin, stanga, '='); std::getline(fin, dreapta, '\n'); xStanga = 0, xDreapta = 0, nrStanga = 0, nrDreapta = 0; rezolva(stanga, nrStanga, xStanga); rezolva(dreapta, nrDreapta, xDreapta); afiseaza(); } return 0; }
|
|
|
|
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 824 Insule
|
: Ianuarie 05, 2016, 21:06:16
|
Pe 8/10 teste imi da "Lungimea minima gresita"... Putin ajutor se poate? #include <iostream> #include <fstream> #include <queue> std::ifstream fin("insule.in"); std::ofstream fout("insule.out"); int n, m; //Linii, coloane int Map[105][105]; //Matrice std::queue < std::pair < int, int > > coada; //Coada std::queue < std::pair < int, int > > pod; //CoadaPentruPod const int di[4] = {1, -1, 0, 0}, //Deplasare pe linie dj[4] = {0, 0, 1, -1}; //Deplasare pe coloana int tipInsula; int insule[4], Lg = 999999; void Read(){ char c; fin >> n >> m; for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ fin >> c; Map[i][j] = c - '0'; } } } bool OKinsula(int a, int b, int t){ if(Map[a][b] == t && a >= 1 && b >= 1 && a <= n && b <= m) return true; return false; } bool OKapa(int a, int b){ if(Map[a][b] == 0 && a >= 1 && b >= 1 && a <= n && b <= m) return true; return false; } bool apaInceputPod(int a, int b){ if (Map[a][b] == 0 && (Map[a-1][b] == 1 || Map[a+1][b] == 1 || Map[a][b-1] == 1 || Map[a][b+1] == 1 || Map[a-1][b] == -1 || Map[a+1][b] == -1 || Map[a][b-1] == -1 || Map[a][b+1] == -1)) return true; return false; } void numarInsule(){ int i_curent, j_curent; //Pastrarea pozitiei curente int i_urmator, j_urmator; //Pastrarea pozitiei urmatoare while (!coada.empty()){ i_curent = coada.front().first; j_curent = coada.front().second; coada.pop(); for (int directie = 0; directie < 4; directie++){ i_urmator = i_curent + di[directie]; j_urmator = j_curent + dj[directie]; if (OKinsula(i_urmator, j_urmator, tipInsula)){ coada.push(std::make_pair(i_urmator, j_urmator)); Map[i_urmator][j_urmator] *= -1; } } } } void verificaLungimea(){ for (int a = 1; a <= n; a++){ for (int b = 1; b <= n; b++){ if (Map[a][b] > 0 && (Map[a-1][b] == -2 || Map[a+1][b] == -2 || Map[a][b-1] == -2 || Map[a][b+1] == -2)){ if(Map[a][b] <= Lg){ Lg = Map[a][b]; } } } } } void calculeazaLungimea(){ int i_curent, j_curent; //Pastrarea pozitiei curente int i_urmator, j_urmator; //Pastrarea pozitiei urmatoare i_curent = pod.front().first; j_curent = pod.front().second; Map[i_curent][j_curent] = 1; while (!pod.empty()){ i_curent = pod.front().first; j_curent = pod.front().second; pod.pop(); for (int directie = 0; directie < 4; directie++){ i_urmator = i_curent + di[directie]; j_urmator = j_curent + dj[directie]; if (OKapa(i_urmator, j_urmator)){ pod.push(std::make_pair(i_urmator, j_urmator)); Map[i_urmator][j_urmator] = Map[i_curent][j_curent] + 1; } } } verificaLungimea(); } int main(int argc, char *argv[]){ Read(); for (int i = 1; i <= n; i++){ for (int j = 1; j <= m; j++){ if (apaInceputPod(i, j)){ pod.push(std::make_pair(i, j)); }else if (Map[i][j] > 0 && i >= 1 && j >= 1 && i <= n && j <= m){ tipInsula = Map[i][j]; switch (Map[i][j]){ case 1: insule[1]++; break; case 2: insule[2]++; break; case 3: insule[3]++; break; default: break; }; if(coada.empty()) Map[i][j] *= -1; coada.push(std::make_pair(i, j)); numarInsule(); } } } calculeazaLungimea(); fout << insule[1] << " " << insule[2] << " " << insule[3] << " " << Lg; return 0; }
|
|
|
|
|