「UVA12004」 Bubble Sort 解题报告

UVA12004 Bubble Sort

Check the following code which counts the number of swaps of bubble sort.

int findSwaps( int n, int a[] )
{
    int count = 0, i, j, temp, b[100000];
    for( i = 0; i < n; i++ ) {
        b[i] = a[i];
    }
    for( i = 0; i < n; i++ ) {
        for( j = 0; j < n - 1; j++ ) {
            if( b[j] > b[j+1] ) {
                temp = b[j];
                b[j] = b[j+1];
                b[j+1] = temp;
                count++;
            }
        }
    }
    return count;
}

You have to find the average value of ’count’ in the given code if we run findSwaps()infinitely many times using constant ’n’ and each time some random integers (from 1 to n) are given in array a[]. You can assume that the input integers in array a[] are distinct.

Input

Input starts with an integer T (≤ 1000), denoting the number of test cases. Each test case contains an integer n (1 ≤ n ≤ 105) in a single line.

Output

For each case, print the case number and the desired result. If the result is an integer, print it. Otherwise print it in ‘p/q’ form, where p and q are relative prime.

Sample Input

2
1
2

Sample Output

Case 1: 0
Case 2: 1/2

思路

一句话题意:求长度为n的排列的期望逆序对数。

很简单,\(f(n)=f(n-1)+\frac{n-1}2=\frac{n\times(n-1)}4,f(1)=0\)

为什么呢?假设把\(n\)插入长度\((n-1)\)的排列,有\(n\)种方法。期望增加的逆序对数就是\(\frac{1+2+...n-1}n=\frac{n\times (n-1)}{2n}=\frac{n-1}2\)

所以\(f(n)=f(n-1)+\frac{n-1}2\)

很简单吧?别忘了开long long

代码

#include<bits/stdc++.h>
using namespace std;
#define LL long long

int T, i;
LL n;

int main(){
    scanf( "%d", &T );
    for ( int i = 1; i <= T; ++i ){
        scanf( "%lld", &n );
        n = n * ( n - 1 ) / 2;
        if ( n & 1 ) printf( "Case %d: %lld/2\n", i, n );
        else printf( "Case %d: %lld\n", i, n / 2 );
    }
    return 0;
}

转载于:https://www.cnblogs.com/louhancheng/p/10271232.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值