Cod sursa(job #324430)

Utilizator BrEacKRazvan Aurariu BrEacK Data 16 iunie 2009 10:35:07
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<iostream>
using namespace std;

int main()
{
    int n,m;

    FILE *in = fopen("stramosi.in", "r");
    FILE *out = fopen("stramosi.out", "w");
    fscanf(in,"%d %d",&n,&m);
    //int mat[100][10];
    int  ** mat = (int**)malloc( (n+1)*sizeof(int *) );
    for(int i = 0; i<=n ; i++) {
        mat[i] = (int *) malloc( 8*sizeof(int));
        for(int j = 0 ; j< 8; j++) {
            mat[i][j] = 0;
        }
    }
    for(int i=1;i<=n;i++){
        int k;
        fscanf(in,"%d",&k);
        mat[i][0] = k;
        mat[0][i] = 0;
    }


    for(int i=1;i<8;i++){
        for(int j = 1; j <= n; j++) {
            mat[j][i] = mat[mat[j][i-1]][i-1];
            /*if(p) {
                mat[q][i] = p;
            } else
                mat[q][i]=0;
            */
        }

    }

    for( int i = 1; i<= m; i++) {
        int p;
        int q;
        fscanf(in,"%d %d",&q,&p);
        //cout<<q<<" "<<p<<" ";
        while( p > 0 && q > 0) {
            for(int j = 7; j>=0 && p > 0; j--) {
                //cout<<q<<" "<<p<<" "<<j<<"| ";
                int k = 1<<j;
                if( k <= p) {
                    p -= k;
                    q = mat[q][j];
                }
            }
        }
        //cout<<endl;

        //if( q != 0 && p==0 )
        fprintf(out,"%u\n",q);
        //else fprintf(out,"0\n");
    }
/*    for(int i = 0; i<=n ; i++) {
        for(int j = 0 ; j< 8; j++) {
            cout<<"\t"<<mat[i][j]<<" ";
        }
        cout<<endl;
    }*/
    fclose(in);
    fclose(out);
    return 0;
}