Friday, February 8, 2019

[Gym] 102021F - Fighting Monsters

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : 102021F - Fighting Monsters
Source            : Codeforces Gym
Category          : Finding Pattern
Algorithm         : Fibonacci Series
Verdict           : Accepted

  1. #include "bits/stdc++.h"  
  2.   
  3. using namespace std;  
  4.   
  5. #define ll       long long int  
  6.   
  7. static const int maxn = 1e6 + 6;  
  8.   
  9. int fibo[maxn];  
  10. int FIBO[maxn];  
  11. int kototomo[maxn];  
  12. int index[maxn];  
  13. int arr[maxn];  
  14.   
  15. void calcFibo()  
  16. {  
  17.     int ptr = 0;  
  18.     fibo[1] = 1;  
  19.     kototomo[1] = ++ptr;  
  20.     FIBO[ptr] = 1;  
  21.     fibo[2] = 1;  
  22.     for (int i = 3; ; i++)  
  23.     {  
  24.         ll fib = (ll)fibo[i-1] + (ll)fibo[i-2];  
  25.         if (fib > 1000000) break;  
  26.         fibo[i] = (int)fib;  
  27.         kototomo[ fibo[i] ] = ++ptr;  
  28.         FIBO[ptr] = fibo[i];   
  29.     }  
  30. }  
  31.   
  32. int main()  
  33. {  
  34. //    freopen("in.txt", "r", stdin);  
  35.   
  36.     calcFibo();  
  37.   
  38.     int n;  
  39.     cin >> n;  
  40.     for (int i = 1; i <= n; i++)  
  41.     {  
  42.         cin >> arr[i];  
  43.         if (arr[i] == 1)  
  44.         {  
  45.             if (index[1] > 0)  
  46.             {  
  47.                 cout << index[1] << " " << i << endl;  
  48.                 exit(0);  
  49.             }  
  50.         }  
  51.         if (kototomo[ arr[i] ] > 0)  
  52.         {  
  53.             int l = FIBO[ kototomo[ arr[i] ] - 1 ];  
  54.             int r = FIBO[ kototomo[ arr[i] ] ];  
  55.             if (index[l] > 0)  
  56.             {  
  57.                 cout << index[l] << " " << i << endl;  
  58.                 exit(0);  
  59.             }  
  60.         }  
  61.         index[ arr[i] ] = i;  
  62.     }  
  63.     fill(begin(index), end(index), 0);  
  64.     for (int i = n; i >= 1; i--)  
  65.     {  
  66.         if (arr[i] == 1)  
  67.         {  
  68.             if (index[1] > 0)  
  69.             {  
  70.                 cout << index[1] << " " << i << endl;  
  71.                 exit(0);  
  72.             }  
  73.         }  
  74.         if (kototomo[ arr[i] ] > 0)  
  75.         {  
  76.             int l = FIBO[ kototomo[ arr[i] ] - 1 ];  
  77.             int r = FIBO[ kototomo[ arr[i] ] ];  
  78.             if (index[l] > 0)  
  79.             {  
  80.                 cout << index[l] << " " << i << endl;  
  81.                 exit(0);  
  82.             }  
  83.         }  
  84.         index[ arr[i] ] = i;  
  85.     }  
  86.     cout << "impossible\n";  
  87. }  

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.