2011年10月13日木曜日

SRM521 Div2 結果


結果 ◯◯-

Easy(250): 213.34
Medium(500): 340.43(一回再提出)

Challenge ◯: +50

合計603.77(Div2内195位)
Rate: 546→713

Medium問題で)(のパターン見落としてて再提出したのが結構痛かった
なんか初めて2連&challenge初成功したからかテンション上がってて色々書いちゃった
よっしゃこのまま緑めざすぞおおおおおお

以下コード方針感想


Easy
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <iostream>
#include <sstream>
using namespace std;
class RedAndGreen {
  public:
    int minPaints(string row) {
      int paint = INT_MAX;
      for (int i = 0; i < row.size(); i++){
        int cur = 0;
        if (i > 0){
          for (int j = 0; j < i; j++){
            if (row[j] == 'G') cur++;
          }
          for (int j = i; j < row.size(); j++){
            if (row[j] == 'R') cur++;
          }
        }else{
          int r = 0;
          int g = 0;
          for (int j = 0; j < row.size(); j++){
            if (row[j] == 'R') r++;
            if (row[j] == 'G') g++;
          }
          cur = r < g ? r : g;
        }
        if (paint > cur) paint = cur;
      }
      return paint;
    }
};
方針:
1.とりあえずGGGRRRR,GGGRRみたいなパターンを潰す。
2.あとはRとGの境目を全部見て塗り替えるのが少ないのを残す。

感想:
結構適当感満載のコードだったからSystemTestのときひやひやした。
方針の1番って必要だったのかなあ・・・?

Medium
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <stack>
#include <set>
#include <iostream>
#include <sstream>
using namespace std;
class MissingParentheses {
  public:
    int countCorrections(string par) {
      int c = 0;
      int open = 0;
      int close = 0;
      for (int i = 0; i < par.size(); i++){
        if (par[i] == '(') open++;
        if (par[i] == ')') {
          if (open > 0) open--;
          else {
            close++;
          }
        }
      }
      c = close + open;
      return c;
    }
};
方針:
1.(()())みたいな普通なパターンなら差を取るだけ。
2.)(っていうパターンのときに差を取るだけだと0になってしまうので閉じ括弧を別計算してあげる。

感想:
適当にささーっと書いて提出したんだけどあまりに早く解けすぎて何か罠があるんじゃないかと戻って確認すると)(を忘れるというひどさ。
これに気づいたおかげでMedium落とさなかったしChallenge成功させられたしプラマイは0に近いようなそうでないような。精神的にはプラスだからとりあえず安心してた。

0 件のコメント:

コメントを投稿