鄧俊輝演算法訓練營習題 最小交換

2021-08-30 11:01:08 字數 971 閱讀 5058

最小交換

時間限制:1 sec

空間限制:256 mb

問題描述

給定乙個 1 到 n 的排列(即乙個序列,其中 [1,n] 之間的正整數每個都出現了恰好 1 次)。

你可以花 1 元錢交換兩個相鄰的數。

現在,你希望把它們公升序排序。求你完成這個目標最少需要花費多少元錢。

輸入格式

第一行乙個整數 n,表示排列長度。

接下來一行 n 個用空格隔開的正整數,描述這個排列。

輸出格式

輸出一行乙個非負整數,表示完成目標最少需要花多少元錢。

樣例輸入

33 2 1

樣例輸出

3樣例解釋

你可以:

花 1 元交換 1,2,序列變成 3 1 2。

花 1 元交換 1,3,序列變成 1 3 2。

花 1 元交換 2,3,序列變成 1 2 3。

總共需要花 3 元。

可以證明不存在更優的解。

資料範圍

對於 20% 的資料,保證 n<=7。

對於 60% 的資料,保證 n<=1,000。

對於 100% 的資料,保證 n<=200,000。

#include #include #include using namespace std;

int ans = 0;//計數

vectorline;//各個元素

vectornewline;//儲存新排列好的序列

int merger(int l,int r)

return ans;//返回交換次數

}int getanswer(int n)

int main(int argc, char const *argv)

printf("%d",getanswer(n));

return 0;

}

鄧俊輝 演算法訓練營練習 數字盒子

數字盒子 問題描述 你有乙個盒子,你可以往裡面放數,也可以從裡面取出數。初始時,盒子是空的,你會依次做 q 個操作,操作分為兩類 插入操作 詢問盒子中是否存在數 x,如果不存在則把數 x 丟到盒子裡。刪除操作 詢問盒子中是否存在數 x,如果存在則取出 x。對於每個操作,你需要輸出是否成功插入或刪除。...

鄧俊輝演算法訓練營習題 樓爾邦德(二分)

樓爾邦德 時間限制 2 sec 空間限制 256 mb 問題描述 給定包含 n 個數的序列 a。再給出 q 個詢問,每個詢問包含乙個數 x,詢問的是序列 a 中不小於 x 的最小整數是多少 無解輸出 1 輸入格式 第一行乙個數 n,表示序列長度。第二行 n 個用空格隔開的正整數,描述序列中的每乙個元...

鄧俊輝 演算法訓練營練習 二叉排序樹

先序遍歷 輸出自己 左子樹 右子樹 中序遍歷 輸出左子樹 自己 右子樹 include using namespace std struct node t 10000 root代表根節點 cnt代表二叉樹大小 int root,cnt 建樹 int insert int v,int x t x lc...