解いた問題

4/21/2011

SRM311Div2

250
class EscapeFromRectangle {
public:
  int shortest(int x, int y, int w, int h) {
    int r = 1 << 25;
    r = min(r, x);
    r = min(r, abs(x-w));
    r = min(r, y);
    r = min(r, abs(h-y));
    return r;
  }
}; 
500
class MatchNumbersEasy {
public:
  string maxNumber(vector <int> m, int n) {
    const int N = 50 + 2;
    const int D = 50 + 2;
    string t[N][D];
    fill(&t[0][0], &t[N-1][D], "$");    
    t[n][0] = "";
    for(int i=n; 0<=i; --i){
      for(int j=0; j<D; ++j){
        if(t[i][j] == "$")continue;
        for(int k=0; k<m.size(); ++k){
          if(i < m[k])continue;
          t[i-m[k]][j+1] = max(t[i-m[k]][j+1], t[i][j] + string(1, '0' + k));
        }
      }
    }
    for(int i=D-1; 0<=i; --i){
      string s = "$";
      for(int j=0; j<N; ++j){
        if(t[j][i][0] == '0')continue;
        s = max(s, t[j][i]);
      }
      if(s != "$")return s;
    }
    return "0";
  }
}; 

1000
直感にまかせて描いたら通った。
class MatrixTransforming {
public:  
  void change(vector<string> &v, int i, int j){
    for(int k=0; k<3; ++k){
      for(int l=0; l<3; ++l){
        v[i+k][j+l] = '0' + (v[i+k][j+l] == '0');
      }
    }
    return ;
  }
  int minPushes(vector <string> a, vector <string> b) {
    int r = 0;
    for(int i=0; i+2<a.size(); ++i){
      for(int j=0; j+2<a[i].size(); ++j){
        if(a[i][j] != b[i][j]){
          change(a, i, j);
          ++r;
        }
      }
    }
    for(int i=0; i<a.size(); ++i){
      if(a[i] != b[i]){
        r = -1;
        break;
      }
    }
    return r;
  }
};

0 件のコメント :

コメントを投稿