Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: 064 Cobai  (Citit de 10429 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Robytzza
De-al casei
***

Karma: -49
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« Răspunde #25 : Martie 11, 2008, 09:36:06 »

imi zice si mie cineva de ce pe testul de mai sus da 66.66  Confused
« Ultima modificare: Martie 11, 2008, 09:43:37 de către Ionescu Robert Marius » Memorat
anna_bozianu
De-al casei
***

Karma: 5
Deconectat Deconectat

Mesaje: 111



Vezi Profilul
« Răspunde #26 : August 16, 2008, 19:04:23 »

Imi cer scuze daca spun banalitati dar consider ca e vorba de informatii utile pentru cei care ajung in situatia frustranta de a rezolva corect o problema si intampina dificultati la afisarea numerelor reale datorita preciziei.

Fie p variabila de tip double calculata corect. Sa se afiseze cu 2 zecimale fara rotunjire.

Varianta utilizata de mine :

.....
#include<math.h>
....
double p;
....
p=floor(100*p)/100;
printf("%.2lf",p);
.....


@robytzza

initial
*....
.....
.....
.....
.....
se aplica S =>
+....
*....
*....
*....
*....
se aplica E =>
+....
.****
.****
.****
.****
se aplica V =>
+....
****.
****.
****.
****.
 deci cobaiul poate sa ajunga in 16 camere din cele 24 posibile (cea din care a plecat se inchide dupa iesirea cobaiului )
Deci probabilitatea e 16/ 24 *100% = 66.(6) % care afisat cu 2 zecimale da 66.66 %
« Ultima modificare: August 16, 2008, 19:15:05 de către Bozianu Ana » Memorat
rusu_radu
Strain


Karma: 8
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #27 : Decembrie 27, 2010, 12:18:59 »

Destul de ciudata treaba:
Cu precizie de 0.01 iau 75
Cu precizie de 0.001 iau 90
cu precizie de 0.000001 iau 100
Avanda in vedere ca precizia ceruta acolo e 0.01 e cam ciudat Very Happy
Memorat
andrei.finaru
Strain
*

Karma: 8
Deconectat Deconectat

Mesaje: 26



Vezi Profilul
« Răspunde #28 : Ianuarie 24, 2011, 19:27:53 »

Eu si cu 2 zecimale, si cu 6 zecimale afisate, tot 75 iau. Imi poate cineva da un test propriu mai mare ca sa-mi dau seama ce caz nu prind? De mentionat ca nu am TLE, deci programul nu cicleaza.
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #29 : Ianuarie 24, 2011, 19:35:25 »

Cod:
10 10
..........
.+.+..+++.
+....+.+..
.++.*....+
...+.+.+.+
......+...
.+.++.+...
....+.....
.++++.....
+..+.+.+..
NVSEV

Cod:
4.28
Memorat
andrei.finaru
Strain
*

Karma: 8
Deconectat Deconectat

Mesaje: 26



Vezi Profilul
« Răspunde #30 : Ianuarie 24, 2011, 20:21:16 »

Mie imi da tot asa: 4.285714. Mersi, oricum.
LE: Mi-a iesit de suta, o greseala stupida in cod d'oh!
« Ultima modificare: Ianuarie 29, 2011, 17:57:03 de către Finaru Andrei Emanuel » Memorat
Smaug-
Strain


Karma: 5
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #31 : Iulie 07, 2011, 16:58:08 »

Este special cu testul 18? Caci mie nu-mi iese de niciun fel.

L.E. Am luat 100 pana la urma, dar banuiesc ca dupa directii mai este scris ceva (doar o banuiala fiindca am trecut testul 18 doar dupa ce am facut break in momentul in care D[curenta] != N si S si V si E. Nu reuseam daca ma opream in momentul in care D[curenta]=='\0'. Citeam cu scanf("%s", D) ).
« Ultima modificare: Iulie 07, 2011, 17:30:07 de către Andrei C. » Memorat
misino
Strain
*

Karma: 10
Deconectat Deconectat

Mesaje: 40



Vezi Profilul
« Răspunde #32 : Iulie 19, 2012, 16:06:53 »

va puteti uita peste una din sursele mele sa imi spuneti si mie de ce imi da killed by signal ?
Memorat
Schumi
Client obisnuit
**

Karma: 36
Deconectat Deconectat

Mesaje: 74



Vezi Profilul
« Răspunde #33 : Iulie 20, 2012, 14:10:38 »

Cod:
while(a[i+dx[x]][j+dy[x]]!=-1&&i+dx[x]>=1&&i+dx[x]<=n&&j+dy[x]>=1&&j+dy[x]<=m)
Aici tu accesezi a[i + dx[x]][j + dy[x]] fara sa verifici daca i + dx[x] si j + dy[x] sunt intre 1 si n, respectiv intre 1 si m, ceea ce poate sa iti strice rezolvarea. Ordinea corecta a conditiilor din while este
Cod:
while(i+dx[x]>=1&&i+dx[x]<=n&&j+dy[x]>=1&&j+dy[x]<=m && a[i+dx[x]][j+dy[x]]!=-1)
Urmatoarea problema este prima linie din while unde in loc sa pui a[i + dx[x]][j + dy[x]] ai pus a[i + dx[x]][j + dy[j]]. J poate merge pana la m, iar vectorul dy are doar 4 elemente => killed by signal 11.
Memorat
AlexandruValeanu
Vorbaret
****

Karma: 29
Deconectat Deconectat

Mesaje: 167



Vezi Profilul
« Răspunde #34 : Ianuarie 22, 2013, 22:44:56 »

Poate sa-mi spuna si mie cineva ce gresesc:

Cod:

#include <iostream>
#include <fstream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iomanip>

#define pp pair<int,int>
#define ox first
#define oy second

#define Nmax (1<<6)

using namespace std;

char mat[Nmax][Nmax];
char s[Nmax*Nmax];

int n, m, nr;
int xP, yP;
float total, vizitat, raspuns;

pp coada[Nmax*Nmax];
pp coada_aux[Nmax*Nmax];
pp v[Nmax*Nmax];

int LgC, LgAuxC;

void citire(){

    freopen("cobai.in", "r", stdin);

    scanf("%d %d", &n, &m);

    for(int i = 0; i < n; i++){

        scanf("%s", s);

        for(int j = 0; j < m; j++){

            mat[i][j] = s[j];

            if(s[j] == '*')
                xP = i,
                yP = j;

            if(s[j] == '.')
                total++;
        }
    }

    scanf("%s", s);

    nr = strlen(s);

    for(int i = 0; i < nr; i++)
        switch(s[i]){

            case 'N': v[i].ox = -1, v[i].oy = 0;  break;
            case 'E': v[i].ox = 0, v[i].oy = 1;   break;
            case 'S': v[i].ox = 1, v[i].oy = 0;   break;
            case 'V': v[i].ox = 0, v[i].oy = -1;  break;
        }
}

void lee(){

    int p, tr, ts;

    LgC = 1;
    coada[0].ox = xP, coada[0].oy = yP;

    for(int p = 0; p < nr; p++){

        for(int i = 0; i < LgC; i++)
            mat[coada[i].ox][coada[i].oy] = '.';

        LgAuxC = 0;

        for(int i = 0; i < LgC; i++){

            tr = coada[i].ox;
            ts = coada[i].oy;

            while(1){

                tr += v[p].ox;
                ts += v[p].oy;

                if(tr < 0 || tr >= n || ts < 0 || ts >= m)
                    break;

                if(mat[tr][ts] != '.')
                    break;

                coada_aux[LgAuxC].ox = tr;
                coada_aux[LgAuxC].oy = ts;
                LgAuxC++;

                mat[tr][ts] = '*';
            }
        }

            for(int i = 0; i < LgAuxC; i++)
                coada[i] = coada_aux[i];

            LgC = LgAuxC;
    }
}

void gaseste(){

    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            if(mat[i][j] == '*')
                vizitat++;
}

void afis(){

    ofstream g("cobai.out");

    g << setprecision(10) << vizitat*100/total << '\n';
}

int main(){

    citire();
    lee();
    gaseste();
    afis();

    return 0;
}

Memorat
lucian666
Client obisnuit
**

Karma: 16
Deconectat Deconectat

Mesaje: 84



Vezi Profilul
« Răspunde #35 : Ianuarie 25, 2013, 00:04:56 »

 


Cred ca la tine greseala este faptul ca nu inchizi prima pozitie
Cod:

coada[0].ox = xP, coada[0].oy = yP;

    .....
.....

        for(int i = 0; i < LgC; i++)
            mat[coada[i].ox][coada[i].oy] = '.';



tu in coada[0].ox ,coada[0].oy bagi pozitia de unde ai plecat ,iar apoi in forul ala tu pui pozitia respectiva in matrice ca fiind spatiu liber,ceea ce este incorect.

Poti face ceva de genu:

Cod:

for(int i = 0; i < LgC; i++)
            mat[coada[i].ox][coada[i].oy] = '.';
mat[xP][yP] ='+';



Cred ca acum ar trebui sa iei ceva puncte in plus .
Bafta Ok

Memorat
AlexandruValeanu
Vorbaret
****

Karma: 29
Deconectat Deconectat

Mesaje: 167



Vezi Profilul
« Răspunde #36 : Ianuarie 25, 2013, 21:13:26 »

Multumesc frumos!
Asta era problema...acum am luat 100p.  Very Happy
Memorat
crisbodnar
Strain


Karma: -13
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #37 : Martie 17, 2013, 17:54:07 »

Imi da raspuns gresit pe primul test. Din ce am vazut, raspunsul ar trebui sa fie 00.00 ceea ce implica un numar de locuri in care s-ar putea afla la finalul traseului egal cu 0. Asta contrazice problema unde se specifica: "Dupa schimbarea unei directii cobaiul se deplaseaza cu cel putin o pozitie in acea directie".

Aveti idee care ar putea fi problema?
Memorat
Magnvs
Strain


Karma: 56
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #38 : Martie 19, 2013, 20:01:49 »

Am trimis exact aceeasi rezolvare, dar cu doua afisari: una cu int-uri si una cu float-uri si am obtinut 40 puncte pt cea cu int-uri si 25 puncte cu cea cu float-uri. V-as recomanda sa faceti si pentru aceasta problema un evaluator care acorda punctaj pentru un test daca diferenta absoluta intre rezultatul dat de programul evaluat si cel oficial este mai mica sau egala cu 0.01.

Pai cam asta face verificatorul la problema asta.
nu, nu cred ca verificatorul face asta asa cum trebuie, chiar trebuie grija sa nu aproximezi.

de exemplu
Cod:
fout<<setprecision(2)<<fixed;
fout<<(double)sol*100/rn-0.005<<"\n";
ia 100 in timp ce
Cod:
fout<<setprecision(2)<<fixed;
fout<<(double)sol*100/rn<<"\n";
ia 75

deci daca aveti 75 de puncte si nu stiti de unde e, s-ar putea sa trebuiasca sa scadeti 0,005.
Memorat
pop_bogdan
Strain


Karma: 3
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #39 : 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++;
            }
    }
}
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines