mosquito.cpp
#include <iostream>
#include <vector>
using namespace std;
typedef vector<vector<int> > matrix;
#define MAT(n,m) (n, vector<int> (m))
matrix I(int n)
{
matrix ret MAT(n,n);
for (int i = 0; i < n; ++i)
ret[i][i] = 1;
return ret;
}
matrix operator*(matrix & lhs, matrix & rhs)
{
int n = lhs.size();
matrix res MAT(n,n);
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
for (int k = 0; k < n; ++k)
res[i][j] += lhs[i][k] * rhs[k][j];
return res;
}
matrix pow(matrix x, int e)
{
int n = x.size();
matrix base = I(n);
while (e) {
if (e & 1)
base = base * x;
x = x * x;
e >>= 1;
}
return base;
}
void pm(matrix & a)
{
for (int i = 0; i < a.size(); ++i) {
for (int j = 0; j < a[0].size(); ++j)
cout << a[i][j] << "\t";
cout << "\n";
}
}
int main()
{
int M, P, L, E, R, S, N;
while(cin >> M >> P >> L >> E >> R >> S >> N){
vector <vector<int> > Days (N+1, vector<int>(3));
Days[0][0] = M;
Days[0][1] = L;
Days[0][2] = P;
for (int i = 1; i <= N; ++i) {
Days[i][0] = Days[i-1][2]/S;
Days[i][1] = Days[i-1][0]*E;
Days[i][2] = Days[i-1][1]/R;
}
/*
matrix base MAT(3, 3);
base[0][2] = 1/E;
base[1][0] = 1/R;
base[2][1] = 1/S;
vector<int> start(3);
start[0] = L;
start[1] = P;
start[2] = M;
matrix res MAT(3, 3);
pm(base);
cout << '\n';
res = pow(base, N);
pm(res);
cout << res[2][0] * start[0] + res[2][1] * start[1] + res[2][2] * start[2] << '\n';
*/
cout << Days[N][0] << '\n';
}
return 0;
}