강호의 초대
시간 제한2초메모리 제한512 MB
각 친구가 싫어하는 한 명이 주어질 때, 무작위 초대 순서에서 초대를 수락하는 친구 수의 기댓값을 구한다.
문제
강호가 친구 명을 파티에 초대하려고 한다. 친구에게는 번부터 번까지 번호가 붙어 있다.
친구는 저마다 싫어하는 친구가 많아야 한 명이다. 번 친구가 싫어하는 친구의 번호는 이고, 가 와 같으면 번 친구는 싫어하는 친구가 없다.
강호는 친구를 한 번에 한 명씩 초대한다. 번 친구는 번 친구가 아직 초대를 받지 않았거나, 이미 초대를 받고 거절한 경우에만 초대를 승낙한다. 즉 번 친구가 번 친구보다 먼저 초대를 받고 승낙했다면, 번 친구는 초대를 거절한다.
초대하는 순서에 따라 승낙하는 친구의 수가 달라진다. 그래서 강호는 가지 순서 중 하나를 균등한 확률로 골라 그 순서대로 초대하기로 했다.
강호의 초대를 승낙하는 친구 수의 기댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 친구의 수 ()이 주어진다.
둘째 줄에 이 공백으로 구분되어 주어진다. ()
출력
초대를 승낙하는 친구 수의 기댓값을 소수점 아래 열째 자리까지 반올림해 한 줄에 출력한다. 뒤따르는 도 생략하지 말고 소수점 아래를 정확히 자리로 채워서 출력한다. 채점 데이터에는 정답이 반올림 경계에 놓이는 경우가 없다.
설명
이고 , , 인 경우를 보자. 번과 번은 싫어하는 친구가 없고, 번은 번을 싫어한다. 초대 순서는 여섯 가지다. 순서로 초대하면 번과 번은 승낙하지만 번은 거절한다. 순서로 초대하면 세 명 모두 승낙한다. 여섯 가지 순서를 모두 따져 보면 승낙하는 친구 수의 기댓값은 다.