Afişează mesaje
Pagini: 1 ... 5 6 [7]
151  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: dinamica : Februarie 03, 2013, 16:48:16
Mersi de indicatie

1 ≤ M ≤ N ≤ 1000
0 ≤ Ci ≤ 999999999 pentru 1 ≤ i ≤ N
Ordinea în care sunt placate cărţile pe raft nu contează ; (1,2,4) şi (4,1,2) reprezintă o singură variantă de alegere şi deci nu vor fi numărate separat.
152  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 823 Reteta2 : Februarie 03, 2013, 16:44:25
Imi poate spune si mie cineva de ce imi spune ca afisez ingredientele incorect...pe testele oficiale merge perfect...mie ca e ceva ce tine de afisare nu de rezolvare...dar nu-mi dau seama cea...

Cod:
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
using namespace std;
 
char s[1005];
char a[1005];
int l=0;
 
ifstream f("reteta2.in");
ofstream g("reteta2.out");
 
struct retetar{
 
    char nume[1000];
    int nr;
};
 
retetar v[1005];
 
void citire(){
 
    f.getline(s,1000);
 
    f.close();
 
}
 
void pune(char c[],int x){
 
    int t=1;
 
    for(int i=1;i<=l;i++){
 
        if(strcmp(v[i].nume,c)==0){
            v[i].nr+=x;
            t=0;
            break;
        }
    }
 
    if(t){
        l++;
        strcpy(v[l].nume,c);
        v[l].nr=x;
    }
}
 
void sortare(){
 
    int gata,i;
    char x[30];
    int aux;
 
    do{
 
        gata=0;
 
        for(i=1;i<l;i++)
 
            if(strcmp(v[i].nume,v[i+1].nume)==1){
 
                strcpy(x,v[i].nume);
                strcpy(v[i].nume,v[i+1].nume);
                strcpy(v[i+1].nume,x);
 
                aux=v[i].nr;
                v[i].nr=v[i+1].nr;
                v[i+1].nr=aux;
 
                gata=1;
            }
 
    }while(gata);
}
 
 
int main()
{
    citire();
 
    int i=1,nr,suma=0;
 
    strcpy(a,s);
 
    while(i<strlen(s))
        if(isspace(s[i]))
            strcpy(s+i,s+i+1);
        else
            i++;
    i=0;
 
    while(i<strlen(s)){
 
        nr=0;
 
        if(isdigit(s[i]) && s[i-1]==')')
            while(isdigit(s[i])){
                nr=nr*10 + s[i]-48;
                i++;
            }
 
        suma+=nr;
 
        i++;
    }
 
    i=0;
 
    while(i<strlen(s)){
 
        if(isdigit(s[i]) && s[i-1]==')' )
            while(isdigit(s[i])){
                strcpy(s+i,s+i+1);
            }
 
        i++;
    }
 
    i=0;
 
    while(i<strlen(s))
        if(s[i]<48)
            strcpy(s+i,s+i+1);
        else
            i++;
 
    i=0;
 
    while(i<strlen(s)){
 
        nr=0;
        char c[30];
        int k=0;
 
        while(isalpha(s[i]))
            c[k++]=s[i++];
 
 
        if(isdigit(s[i]))
            while(isdigit(s[i])){
                nr=nr*10 + s[i]-48;
                i++;
            }
 
        c[k]='\0';
 
        pune(c,nr);
 
    }
 
    sortare();
 
    g<<suma<<endl;
 
    for(int i=1;i<=l;i++){
 
        g<<v[i].nume<<" "<<v[i].nr<<endl;
 
    }
 
    g.close();
 
    return 0;
}
153  infoarena - concursuri, probleme, evaluator, articole / Informatica / dinamica : Februarie 02, 2013, 20:24:55
Sunt nou in programare dinamica si am o problema la care as avea nevoie de ajutor:

"Coriolan Nepriceputeanu este un intelectual desăvârşit, care are o colecţie impresionantă formată din N cărţi. Fiecare dintre acestea are asociat un cod ISBN format din cel mult 9 cifre. Fiind foarte ataşat de cărţile sale lui Coriolan i-ar plăcea ca acestea să fie ordonate riguros, după anumite reguli, care unor neiniţiaţi le-ar putea părea uşor bizare. Astfel, pe primul raft, pe care încap exact M cărţi, el ar vrea să pună volume având suma codurilor ISBN divizibilă cu 100. Cum însă matematica nu e punctul lui forte, vă roagă pe voi să-l ajutaţi să calculeze numărul de variante de alegere a celor M cărţi conform criteriului impus de el. Fiind vorba de un număr foarte mare, Coriolan preferă să afle restul la împărţirea cu 9001 a acestuia."
154  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 394 Vila 2 : Februarie 02, 2013, 19:47:53
Imi poate spune si mie cineva cu gresesc sau un hint despre rezolvare?
155  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 257 Catun : Februarie 02, 2013, 15:58:56
Am gasit problemele...mersi de ajutor
156  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 257 Catun : Februarie 02, 2013, 00:13:08
Imi poate spune si mie cineva ce gresesc e iau 10p?
157  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 543 Dk : Ianuarie 30, 2013, 12:31:07
Am si eu o intrebare : ce gresesc la rezolvare de imi da cu orice baza asi alege 30p?
158  infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Problema grafuri (matricea costurilor / drumuri) : Ianuarie 27, 2013, 16:23:16
Se face cu Roy-Floyd si schimbi testul de verificare cu ceva de genul if cost[j] < cost[k] + cost[k][j]....
159  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 1010 Pietre2 : Ianuarie 26, 2013, 23:16:55
Puteti sa imi spuneti va rog ce nu e bine aici http://infoarena.ro/job_detail/859053 ? .Fac un fel de Lee pt fiecare element de pe margine.Iau WA pe testele 4 si 6 Sad( .

Gresesti in for-uri. Cand faci primul drum(in fiecare for) il faci pe mxp = 0, ceea ce este corect. Dar cand faci al doilea drum in fiecare for il faci pe mxp = 0 dupa ce faci drumul si nu inainte de apelul functie drum.

Schima for-urile cu
Cod:

for(j=1;j<=n;j++) {mxp=0; Drum(1,j,0);if (mxp>mx) {mx=mxp;xm=1;ym=j;}mxp=0;Drum(n,j,0);if (mxp>mx) {mx=mxp;xm=n;ym=j;} }
for(i=1;i<=n;i++) {mxp=0; Drum(i,1,0);if (mxp>mx) {mx=mxp;xm=i;ym=1;}mxp=0;Drum(i,n,0);if (mxp>mx) {mx=mxp;xm=i;ym=n;}}

si o sa iei 100p
160  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 064 Cobai : Ianuarie 25, 2013, 21:13:26
Multumesc frumos!
Asta era problema...acum am luat 100p.  Very Happy
161  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 346 Padure : Ianuarie 25, 2013, 21:10:27
Poate sa-mi spune si mie cineva cum mai poate fi modificata sursa mea pentru a intra in timp?
162  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 983 Expozitie : Ianuarie 24, 2013, 22:39:36
Daca n < d*k raspunsul este 0
163  infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 064 Cobai : 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;
}

164  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Problema lanturi : Ianuarie 10, 2013, 12:59:36
Am si eu nevoie de ceva ajutor la problema:
http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1004

Am nevoie de o indicatie de cum sa aflu toate drumurile de cost minim intre x si y.
Cred ca gresesc in functia rez dar nu imi dau seama cum sa corectez.

Cod:

#include <iostream>
#include <cstdio>

#define Nmax 1001
#define inf 0x3f3f3f3f

using namespace std;

int cost[Nmax][Nmax];
int nr[Nmax];
bool viz[Nmax];
int d[Nmax];
int tata[Nmax];

int n, m, inceput, sfarsit;
int a, b, c;
int coada[Nmax];
int inc, sf;

void citire(){

    FILE *f = fopen("lanturi.in", "r");

    fscanf(f,"%d %d %d %d", &n, &m, &inceput, &sfarsit);

    for(int i=1; i<=m; i++){

        fscanf(f,"%d %d %d", &a, &b, &c);

        cost[a][b] = cost[b][a] = c;
    }

    fclose(f);
}

void init(){

    for(int i=1; i<=n; i++)
        for(int j=1; j<=n; j++)
            if(cost[i][j]==0)
                cost[i][j] = inf;

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

      viz[i]=0;

      d[i] = cost[inceput][i];

      if(d[i] < inf)
            tata[i]= inceput;
      else
        tata[i] = 0;
    }

  viz[inceput]=1; tata[inceput]=0; d[inceput]=0;

}

void dijkstra(){

    int k = 1, min;

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

        min = inf;

        for(int i=1; i<=n; i++)
            if(viz[i]==0 && d[i]<min)
                min = d[i], k = i;

        coada[sf++] = k;

        viz[k] = 1;

        for(int i=1; i<=n; i++)
            if(viz[i]==0 && cost[k][i] + d[k] < d[i])
                d[i] = cost[k][i] + d[k], tata[i] = k;
    }
}

void rez(){

    for(int i=inc ; i<sf; i++)
        for(int j=1; j<=n; j++)
            if(cost[coada[i]][j] < inf)
                if(d[j] == d[coada[i]] + cost[coada[i]][j])
                    nr[coada[i]]++, nr[j]++;

}

void afis(){

    FILE *g = fopen("lanturi.out","w");

    fprintf(g,"%d\n", nr[sfarsit]);

    fclose(g);
}

int main()
{
    citire();
    init();
    dijkstra();
    rez();
    afis();

    return 0;
}

165  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Răspuns: Problema valet : Ianuarie 06, 2013, 15:07:44
Multumesc pentru ajutor!
Daca mai am ceva nelamuriri o sa mai scriu! Smile
166  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Răspuns: Problema valet : Ianuarie 04, 2013, 18:47:00
Nu cred ca merge sa fac lee doar de la pozitia actuala deoarece in an doiles exemplu nu am cum sa ies direct ( fara sa mut alte masini ). Imi trebuie o idee de cum sa mut masinile ...
167  infoarena - concursuri, probleme, evaluator, articole / .CAMPION / Problema valet : Ianuarie 04, 2013, 16:19:10
Am si eu nevoie de niste indicatii pentru problema valet.
Mentionez ca nu vreau niciun fel de sursa doar indicatii de cum sa fac lee-ul.

http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1351
Pagini: 1 ... 5 6 [7]
Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines