a53

BileAN

a53
Nov 20th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. ifstream fin("bilean.in");
  5. ofstream fout("bilean.out");
  6. const int mod=301104;
  7.  
  8. int N, i;
  9. int MAT[3][3], SOL[3][3];
  10.  
  11. inline void mult(int A[][3], int B[][3], int C[][3])
  12. {
  13. int i, j, k;
  14. for (i = 0; i < 2; i++)
  15. for (j = 0; j < 2; j++)
  16. for (k = 0; k < 2; k++)
  17. C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % mod;
  18.  
  19. }
  20.  
  21. inline void lg_power(int P, int M[][3])
  22. {
  23. int C[3][3], AUX[3][3], i;
  24.  
  25. memcpy(C, MAT, sizeof(MAT));
  26. M[0][0] = M[1][1] = 1;
  27.  
  28. for (i = 0; (1 << i) <= P; i++)
  29. {
  30. if (P & (1 << i))
  31. {
  32. memset(AUX, 0, sizeof(AUX));
  33. mult(M, C, AUX);
  34. memcpy(M, AUX, sizeof(AUX));
  35. }
  36. memset(AUX, 0, sizeof(AUX));
  37. mult(C, C, AUX);
  38. memcpy(C, AUX, sizeof(C));
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. fin>>N;
  45. if(N==1)
  46. fout<<2;
  47. else if(N==2)
  48. fout<<3;
  49. else
  50. {
  51. MAT[0][0] = 0; MAT[0][1] = 1; MAT[1][0] = 1; MAT[1][1] = 1;
  52. lg_power(N+1, SOL);
  53. fout<<SOL[1][1];
  54. }
  55. return 0;
  56. }
Add Comment
Please, Sign In to add comment