Afişează mesaje
Pagini: [1]
1  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 823 Reteta2 : Martie 11, 2016, 13:13:29
Pe alt site (asemanator infoarena, nu dau nume pentru a evita reclama) iau 100 de puncte, cu aceeasi sursa postata aici. In evaluatorul de la OJI am luat 100 de puncte. Faza e ca aici nu trece de 0 puncte.
Da, am verificat numele fisierelor de intrare si de iesire si sunt corecte. Care e problema?!
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.   d'oh! read Don't get it

Cod:
#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?
Cod:
#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;
}
4  infoarena - concursuri, probleme, evaluator, articole / Arhiva educationala / Răspuns: 002 Algoritmul lui Euclid extins : Noiembrie 09, 2015, 15:36:42
La testul de intrare oferit ca exemplul, rezultatele pe care le-ati dat in testul de iesire sunt gresite  d'oh! .
Pagini: [1]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines