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ですね
これだけのことでした。馬鹿なの?死ぬの?
とりあえず書き取り練習
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
>= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >= >=
コメント
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/n4_t/20090910