- class PastingPaintingDivOne {
- public:
- vector<long long> countColors(vector <string> cb, int T)
- {
- while (cb.size() < cb[0].size()) {
- cb.push_back(string(cb[0].size(), '.'));
- }
- while (cb.size() > cb[0].size()) {
- for (int i = 0; i < cb.size(); ++i) {
- cb[i] += '.';
- }
- }
- const int M = cb.size();
- const int N = M * 2 + 10;
- char C[N][N];
- fill(&C[0][0], &C[N - 1][N - 1] + 1, '.');
- lli r, g, b;
- lli R, G, B;
- R = G = B = 0;
- r = g = b = 0;
- lli base;
- for (base = 0; base <= M && base < T; ++base) {
- for (int i = 0; i < M; ++i) {
- for (int j = 0; j < M; ++j) {
- if (cb[i][j] != '.') C[base + i][base + j] = cb[i][j];
- }
- }
- r = g = b = 0;
- for (int i = 1; i < M; ++i) {
- r += (C[base][base + i] == 'R') + (C[base + i][base] == 'R');
- g += (C[base][base + i] == 'G') + (C[base + i][base] == 'G');
- b += (C[base][base + i] == 'B') + (C[base + i][base] == 'B');
- }
- r += (C[base][base] == 'R');
- g += (C[base][base] == 'G');
- b += (C[base][base] == 'B');
- R += r;
- G += g;
- B += b;
- }
- if (base < T) {
- R += (T - base) * r;
- G += (T - base) * g;
- B += (T - base) * b;
- }
- for (int i = 0; i < M; ++i) {
- for (int j = 0; j < M; ++j) {
- R += (lli)(C[base + i][base + j] == 'R');
- G += (lli)(C[base + i][base + j] == 'G');
- B += (lli)(C[base + i][base + j] == 'B');
- }
- }
- vector<lli> ret;
- ret.push_back(R);
- ret.push_back(G);
- ret.push_back(B);
- return ret;
- }
- };
12/01/2012
SRM 562 Div1 Easy
250