問題への解決策LA2756

タイトル効果 \(N- \)データのセット、指定された整数のデータの各セット\(M \) 交換の最小数、のように円を決定\(M \)、2つのExchange周り個体(例えば1 1-> 2-> 3->としては、3-> 2-> 1-> 3となります)そして、隣接する2を交換するための時間。

分析私たちは、最初の補題を証明します。

補題は、最適なプロセスは、それぞれ2つの配列が反転されるように二つの部分に分けることができる円を反転しなければなりません。

レンマ

プルーフ \(M = 1 \)は、明らかに時間が確立されます。仮定(mは\)\考慮するために設立された(M + 1 \)\ケース。以降のための\(M \)を保持し、したがって考慮(M + 1 \)\点は移動しません。このとき、他の\(M \)点が並んされ、\(M + 1 \)必要オフにキャストするためには、いずれかのフリップシーケンスを構成すると共に、左であることを示している、とのいずれか右一緒。セクション場合\(M + 1 \)残りの点の順序に影響を及ぼさないジョギング、。最適に起因は、点が残されているいずれかのロールオーバーシーケンスを構成する左右同等で、右に横切って、またはすべての方法を横切って歩きました。、元の命題は、数学的帰納によって設定されました。

長さ\(L \)交換の数である配列、反転(\ FRAC {L(L-1)} {2} \)\簡単な計算を得ることができるように、できるだけ円が等しい長さに分割され、パート2が最適です。

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

int n, x;

int f(int x)
{
    return x * (x - 1) / 2;
}

int main()
{
    scanf("%d", &n);
    while(n--) {
        scanf("%d", &x);
        printf("%d\n", f(x / 2) + f((x + 1) / 2));
    }
}

おすすめ

転載: www.cnblogs.com/whx1003/p/12110056.html