計蒜客 題庫 三值排序

2022-05-03 08:27:10 字數 1090 閱讀 1035

題目

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。

寫乙個程式計算出,計算出的乙個包括1、2、3三種值的數字序列,排成公升序所需的最少交換次數。

輸入第1行為類別的數量n(1≤n≤1000)

輸入第2行到第n+1行,每行包括乙個數字(1或2或3)。

輸出包含一行,為排成公升序所需的最少交換次數。

樣例輸入

922

1333

231

樣例輸出

4

思路

對於排好序的1、2、3序列,看成一段1、一段2、一段3。對於每一段而言,數字是沒有順序之別的。那麼再看做是編號分別為1、2、3的盒子。而盒子裡的數字看做編號為1、2、3的球。一開始這些球無規則的放在3個盒子裡,現在做的就是把球放在相應盒子裡。分兩步:1、把2、3盒子裡的球重新放置,即2號盒子裡的y個3號球給3號盒子,3號盒子裡的z個2號球給2號盒子。交換次數為y、z的最大值。2、把1號盒子裡的2號球和3號球(共x個)分別與2、3盒子裡的1號球交換。

一共:x+max(y,z)

**

#include#include

using

namespace

std;

intn;

int s[1000

];int t[1000

];int x = 0, y = 0, z = 0

;void

solve()

break

;

case3:

if (s[i] == 2

)

break

; }}}

}int

main()

solve();

int num = x + (y>z ?y : z);

cout

<< num

}

計蒜客 三值排序

三值排序 排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n...

計蒜客 三值排序(貪心)

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1000...

計蒜客 三值排序(貪心)

排序是一種很頻繁的計算任務。乙個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種1,2和3。我們用交換的方法把他排成公升序的。寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1000...