C - コイン / AtCoderBeginnerContest #008
#include <iostream> #include <iomanip> using namespace std; #define MAX 100 void Solve(int n) { int c[MAX]; double answer=0.0; for (int i=0; i<n; ++i) cin >> c[i]; for (int i=0; i<n; ++i) { int coin=0; for (int j=0; j<n; ++j) if ( i!=j && !(c[i]%c[j]) ) ++coin; if (coin%2) answer+=0.5; else answer+=(double)( (coin+2.0)/(2.0*coin+2.0) ); } cout << fixed << setprecision(12) << answer << endl; } int main(void) { int n; cin >> n; Solve(n); return 0; }
対象のコインが約数の群の中で何番目を抽出し、場合分けで期待値を足し上げ。
最後に答えを出力。
~了~