解いた問題

12/01/2012

SRM 562 Div1 Easy

250



  1. class PastingPaintingDivOne {  
  2. public:  
  3.   vector<long long> countColors(vector <string> cb, int T)  
  4.   {  
  5.     while (cb.size() < cb[0].size()) {  
  6.       cb.push_back(string(cb[0].size(), '.'));  
  7.     }  
  8.     while (cb.size() > cb[0].size()) {  
  9.       for (int i = 0; i < cb.size(); ++i) {  
  10.         cb[i] += '.';  
  11.       }  
  12.     }  
  13.   
  14.     const int M = cb.size();  
  15.     const int N = M * 2 + 10;  
  16.   
  17.     char C[N][N];  
  18.     fill(&C[0][0], &C[N - 1][N - 1] + 1, '.');  
  19.   
  20.     lli r, g, b;  
  21.     lli R, G, B;  
  22.     R = G = B = 0;  
  23.     r = g = b = 0;  
  24.   
  25.     lli base;  
  26.     for (base = 0; base <= M && base < T; ++base) {  
  27.       for (int i = 0; i < M; ++i) {  
  28.         for (int j = 0; j < M; ++j) {  
  29.           if (cb[i][j] != '.') C[base + i][base + j] = cb[i][j];  
  30.         }  
  31.       }  
  32.       r = g = b = 0;  
  33.       for (int i = 1; i < M; ++i) {  
  34.         r += (C[base][base + i] == 'R') + (C[base + i][base] == 'R');  
  35.         g += (C[base][base + i] == 'G') + (C[base + i][base] == 'G');  
  36.         b += (C[base][base + i] == 'B') + (C[base + i][base] == 'B');  
  37.       }  
  38.       r += (C[base][base] == 'R');  
  39.       g += (C[base][base] == 'G');  
  40.       b += (C[base][base] == 'B');  
  41.       R += r;  
  42.       G += g;  
  43.       B += b;  
  44.     }  
  45.     if (base < T) {  
  46.       R += (T - base) * r;  
  47.       G += (T - base) * g;  
  48.       B += (T - base) * b;  
  49.     }  
  50.     for (int i = 0; i < M; ++i) {  
  51.       for (int j = 0; j < M; ++j) {  
  52.         R += (lli)(C[base + i][base + j] == 'R');  
  53.         G += (lli)(C[base + i][base + j] == 'G');  
  54.         B += (lli)(C[base + i][base + j] == 'B');  
  55.       }  
  56.     }  
  57.   
  58.     vector<lli> ret;  
  59.     ret.push_back(R);  
  60.     ret.push_back(G);  
  61.     ret.push_back(B);  
  62.     return ret;  
  63.   }  
  64. };