Cod sursa(job #2182444)

Utilizator BrateSBratescu Stefan BrateS Data 22 martie 2018 13:13:52
Problema Iepuri Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <cstring>

using namespace std;

const int kMod = 666013;

class input{
public:
    int x,y,z,a,b,c,n;
    input(int x, int y, int z, int a, int b, int c, int n) :
            x(x), y(y), z(z), a(a), b(b), c(c), n(n) {}
};
class Task {
 public:
	void solve() {
		read_input();
		print_output(get_result());
	}

 private:
	int n;
	vector<input*> v;

	void read_input() {
		ifstream fin("iepuri.in");
		fin >> n;
		for (int i = 0, x,y,z,a,b,c,days; i < n; i++) {
			fin >> x >> y >> z >> a >> b >> c >> days;
            auto *input1 = new input(x, y, z, a, b, c, days);
			v.push_back(input1);
		}
		fin.close();
	}

#define KMAX 3
    void multiply_matrix(int A[KMAX][KMAX], int B[KMAX], int C[KMAX]) {
        int tmp[KMAX];

        // tmp = A * B
        for (int i = 0; i < KMAX; ++i) {
            for (int j = 0; j < KMAX; ++j) {
                int sum = 0;

                for (int k = 0; k < KMAX; ++k) {
                    sum += A[i][k] * B[k];
                }

                tmp[i] = sum % kMod;
            }
        }
        memcpy(C, tmp, sizeof(tmp));
    }
	vector<int> get_result() {
        vector<int> result;
        for(auto i : v){//for each input
            int C[3][3] = {
                    {i->a, i->b, i->c},
                    {1, 0 ,0},
                    {0, 1, 0},
            };
            int d[3] = {i->z, i->y, i->x};
            for(int j = 0 ; j < i->n; j++){//for each day
                multiply_matrix(C,d,d);
            }
            result.push_back(d[2]);
        }
        return result;
	}

	void print_output(vector<int> result) {
		ofstream fout("iepuri.out");
        for (auto i : result)
            fout << i << "\n";
		fout.close();
	}
};

int main() {
	Task task;
	task.solve();
	return 0;
}