C - コイン / AtCoderBeginnerContest #008

abc008.contest.atcoder.jp

#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;
}

対象のコインが約数の群の中で何番目を抽出し、場合分けで期待値を足し上げ。
最後に答えを出力。
~了~