2010-02-05
過去問マラソン(#12):SRM153(続き)
過去問マラソン | |
![]()
ちょっとブランクが空いたが気を取り直して。オフィスの環境テストを兼ねて過去問にトライ。
無刻印のHHKB Professional 2で初めて書くC++。打ちやすい。矢印キーが無い事が不慣れなので指慣らしに時々過去問でも解くか。
Medium(450): Collision
- 今日も問題が頭に入ってこない...
- 要は実装するだけ?
- 211.83 (41'45'') インストール作業の裏でやっているとはいえ時間かけすぎ
- passed system test
using namespace std;
#define sz(a) int((a).size())
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define tr(c,i) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); i++)
class Collision {
vector<int> az; int iz, azn, tz;
double memory(int i,int used,double nocol){ // have memory.
if(i==azn) return nocol;
int a = az[i];
if (used+a > iz) return 0;
long double r = 1.0;
for(int j=0,l=iz,re=iz-used; j<a; j++,l--,re--){
r = r * re / l;
}
return memory(i+1,used+a,nocol*r);
}
double no_memory(){
long double r = 1.0;
for(int i=0,l=iz;i<tz;i++,l--) {
r = r * l / iz;
}
return (double)r;
}
public:
double probability(vector<int> assignments, int ids) {
az.assign(all(assignments)); azn=sz(az); iz = ids;
int total = 0; tr(az,it) total += *it; if (total > iz) return 0.0;
tz = total;
double r1 = memory(0,0,1), r2 = no_memory();
return abs(r1 - r2);
}
};
コメント
トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/n4_t/20100205