Cod sursa(job #130250)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 31 ianuarie 2008 18:01:47
Problema Stramosi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
 #include <iostream>     
 #include <fstream>     
     
 using namespace std;     
     
 int N(0),     
     M(0),     
     prev[250001],     
     P(0),     
     Q(0),     
     A[19][250001];     
     
 int p2[19] = {     
     1,     
     1<<1,     
     1<<2,     
     1<<3,     
     1<<4,     
     1<<5,     
     1<<6,     
     1<<7,     
     1<<8,     
     1<<9,     
     1<<10,     
     1<<11,     
     1<<12,     
     1<<13,     
     1<<14,     
     1<<15,     
     1<<16,     
     1<<17,     
     1<<18     
 };     
     
 int main(int argc, char *argv[]) {     
     ifstream fin("stramosi.in");     
     fin >> N >> M;     
     for (int i(1); i <= N; ++i) {     
         fin >> prev[i];     
         A[0][i] = prev[i];     
     }     
     
     for (int k(1); k < 19; ++k)      
         for (int i(1); i <= N; ++i)     
             A[k][i] = A[k - 1][A[k - 1][i]];     
        
     FILE *fout = fopen("stramosi.out", "w");     
     while (M--) {     
         fin >> Q >> P;          
         while (P && Q) {     
             int i = 0;     
             while (p2[i] <= P)     
                 ++i;     
             if (p2[i] > P)     
                 --i;     
             Q = A[i][Q];     
             P -= p2[i];     
                  
         }   fprintf(fout, "%d\n", Q);     
     }     
     fclose(fout);     
     fin.close();     
     
     return 0;     
 }