Source code for submission s1044

mosquito.cpp

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. typedef vector<vector<int> > matrix;
  5. #define MAT(n,m) (n, vector<int> (m))
  6.  
  7. matrix I(int n)
  8. {
  9. matrix ret MAT(n,n);
  10. for (int i = 0; i < n; ++i)
  11. ret[i][i] = 1;
  12. return ret;
  13. }
  14. matrix operator*(matrix & lhs, matrix & rhs)
  15. {
  16. int n = lhs.size();
  17. matrix res MAT(n,n);
  18. for (int i = 0; i < n; ++i)
  19. for (int j = 0; j < n; ++j)
  20. for (int k = 0; k < n; ++k)
  21. res[i][j] += lhs[i][k] * rhs[k][j];
  22. return res;
  23. }
  24. matrix pow(matrix x, int e)
  25. {
  26. int n = x.size();
  27. matrix base = I(n);
  28. while (e) {
  29. if (e & 1)
  30. base = base * x;
  31. x = x * x;
  32. e >>= 1;
  33. }
  34. return base;
  35. }
  36. void pm(matrix & a)
  37. {
  38. for (int i = 0; i < a.size(); ++i) {
  39. for (int j = 0; j < a[0].size(); ++j)
  40. cout << a[i][j] << "\t";
  41. cout << "\n";
  42. }
  43. }
  44.  
  45. int main()
  46. {
  47. int M, P, L, E, R, S, N;
  48. while(cin >> M >> P >> L >> E >> R >> S >> N){
  49. vector <vector<int> > Days (N+1, vector<int>(3));
  50. Days[0][0] = M;
  51. Days[0][1] = L;
  52. Days[0][2] = P;
  53. for (int i = 1; i <= N; ++i) {
  54. Days[i][0] = Days[i-1][2]/S;
  55. Days[i][1] = Days[i-1][0]*E;
  56. Days[i][2] = Days[i-1][1]/R;
  57. }
  58. /*
  59. matrix base MAT(3, 3);
  60. base[0][2] = 1/E;
  61. base[1][0] = 1/R;
  62. base[2][1] = 1/S;
  63. vector<int> start(3);
  64. start[0] = L;
  65. start[1] = P;
  66. start[2] = M;
  67. matrix res MAT(3, 3);
  68. pm(base);
  69. cout << '\n';
  70. res = pow(base, N);
  71. pm(res);
  72.  
  73. cout << res[2][0] * start[0] + res[2][1] * start[1] + res[2][2] * start[2] << '\n';
  74. */
  75. cout << Days[N][0] << '\n';
  76. }
  77.  
  78. return 0;
  79. }
  80.