http://www.codechef.com/problems/LEBOBBLE버블 정렬이 수행 할 스왑 횟수를 어떻게 계산할 수 있습니까? n 개의 정수의 배열 A의 정렬
버블은 다음과 같은 방식으로 작동합니다 : 당신은 n 개의 정수의 배열 B 주어진다
var int i, j;
for i from n downto 1
{
for j from 1 to i-1
{
if (A[j] > A[j+1])
swap(A[j], A[j+1])
}
}
. 이어서 어레이 A는 다음과 같이 어레이 B를 사용하여 생성된다
: 각각 I (1 < = 1 < = N)에 대한 우리는 달리 아이 = 양방향 확률 파이로 아이 = 양방향 + D를 설정. Little Elephant가 배열 A가 위 버블 정렬 알고리즘으로 정렬 될 때 버블 정렬이 할 것으로 예상되는 스왑 수를 찾으십시오. 입력입력의 첫 번째 줄에는 단일 정수 T - 테스트 사례의 수를 포함합니다. T 테스트 케이스는 다음과 같습니다. 각 테스트 케이스의 첫 번째 줄에는 정수 n과 d의 쌍이 들어 있습니다. 각 테스트 케이스의 다음 줄에는 n 개의 정수 - 배열 B가 포함됩니다. 다음 줄에는 n 개의 정수 - 배열 P가 포함됩니다. 출력 T 행에는 T 실수가 인쇄됩니다. 모든 숫자를 소수점 4 자리로 정확하게 반올림하십시오. 제약
1 <= T <= 5
1 <= n <= 50000
1 <= Bi, d <= 10^9
0 <= Pi, <= 100
Example
Input:
2
2 7
4 7
50 50
4 7
5 6 1 7
25 74 47 99
Output:
0.2500
1.6049
당신이 접근하는 방법에 대한 힌트가 있습니까?
스택 오버플로에 오신 것을 환영합니다. 지금까지해온 일의 샘플을 제공하고 정확한 문제와 관련된 특정 질문을하면 문제에 대한 도움을 얻을 수있는 더 나은 기회를 얻게됩니다. – Maciej
명확히하기 위해 특정 입력에 필요한 스왑 수 또는 평균 스왑 수 (계산 복잡성)를 찾으려고합니다. – ChrisCM
제목은 desaster입니다 ... –