解いた問題

4/26/2012

SRM512 Div1 Easy

256

何日目まで店に通うかを決め打ちする。



int f(char c)
{
  if ('0' <= c && c <= '9') return c - '0';
  if ('A' <= c && c <= 'Z') return c - 'A' + 10;
  if ('a' <= c && c <= 'z') return c - 'a' + 36;
  return 0;
}

class MysteriousRestaurant {
public:
  int maxDays(vector <string> P, int B)
  {
    const int F = P[0].size();
    for (int i = 0; i < (int)P.size(); ++i) {

      int sum[7][F];
      fill(&sum[0][0], &sum[7 - 1][F], 0);

      for (int j = 0; j < (int)F; ++j) {
        for (int k = 0; k <= (int)i; ++k) {
          sum[k % 7][j] += f(P[k][j]);
        }
      }
     
      int b = 0;
      for (int j = 0; j < (int)7; ++j) {
        int mn = 1 << 30;
        for (int k = 0; k < (int)F; ++k) {
          mn = min(mn, sum[j][k]);
        }
        b += mn;
      }
     
      if (b <= B) ; else return i;
    }

    return P.size();
  }
};