2009-09-10
SRM448 Div1 Easy: TheBlackJackDivOne
なんで落とされたか
#define sz(a)  int((a).size())
#define pb  push_back
#define all(c)  (c).begin(),(c).end()
#define mset(arr,val)  memset(arr,val,sizeof(arr))
#define tr(c,i)  for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
#define rep(var,n)  for(int var=0;var<(n);var++)
#define found(s,e)  ((s).find(e)!=(s).end())
class TheBlackJackDivOne {
  vector<int> rest;
  
  int cval(int c){
    if ('0'<=c &&c<='9')return c-'0';
    switch(c){
      case 'T':case'J':case'Q':case 'K': return 10;
      case 'A': return 11;
    }
  }
    
 public:
  double sb(double r,int re,int to,int ma){
    double d=0;
    for(int i=1;i<=11;i++){
      if(rest[i]==0) continue;
      double m_ = 1.0*rest[i]/re;
      int to_ = to - i;
      if(to_<=0) { d += r*ma*m_; continue; }
      rest[i]--;
      d += sb(r*m_,re-1,to_,ma+1);
      rest[i]++;
    }
    return d;
  }
  
  double expected(vector<string> cards) {
    int i;
    rest.resize(12); rep(i,12) rest[i]=0;
    for(i=2;i<=9;i++) rest[i]+=4;
    rest[10]+=16; rest[11]+=4;
    
    int n=sz(cards);
    vector<int> v(n);
    int sc=0;
    rep(i,n){
      int c = cval(cards[i][0]);
      v[i] = c;
      rest[c]--;
      sc+=c;
      // if(sc>21) return 0.0; ////OOPS
      if(sc>=21) return 0.0;
    }
    return sb(1.0, 52-n,21-sc,1);
  }
};
			>21を>=21にすればokですね
これだけのことでした。馬鹿なの?死ぬの?
とりあえず書き取り練習
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
SRM448
ICFPC2009飲み会会場から無理矢理参加。
すごすぎる人達に見られてて緊張する
09.11.2009
| DIV | level | 問題名 | 競技中 | 後で | System Test | 通過率 | 備考 | 
|---|---|---|---|---|---|---|---|
| 1 | 250 | TheBlackJackDivOne | 撃沈 | - | - | 0pts | |
| 1 | 500 | TheCardShufflingDivOne | 諦めた | - | - | - | |
| 1 | 1000 | TheCardLineDivOne | 開いてみただけ | - | 
250点問題: TheBlackJackDivOne
- ゼロばかり返ってくるから変だと思ったら分子がintだった
- 時間かかりすぎ
500点問題: TheCardShufflingDivOne
- TLEしない方法が思いつかず諦め
1000点問題: TheCardLineDivOne
- openedって言われたいから開いてみただけ
Challenge Time
- 黄色い人の追撃は防衛したが赤い人に落とされた
- imosさんの500点ソースが簡潔すぎて涙した
- 室内の青い人が全滅
1490→1419 (-71) 青のまま
- 青〜黄:250が確実に解けること
- 黄〜赤:500も確実に解けること(これで2800ぐらいまで行けるとか by cafelier氏)。(相応の撃墜スキルも必要かと)
- 1000点問題には手を出さなくていい
コメント
	トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/n4_t/20090910
		


 


