2013NOIP D1 T2 火柴排隊

2021-07-11 13:27:33 字數 1219 閱讀 3939

題目點這裡

題目大意:

有兩列火柴,給出他們的根數和他們對應的長度ai,bi,並且規定距離為

解題思路:

怎麼使距離最小?哈哈哈哈,是在兩個佇列裡面的火柴相對應(a集合火柴中第i小對應b集合中第i小),將兩個集合排序(為了讓ab相對應),因為排好序a,b是最小的,所以a下標與b下標就要對應;

然後按照a去處理b,開乙個陣列c,c[a[i].point] = b[i].point;陣列c中的下標為a[i]的下標,對應的值是b[i]的下標;

舉乙個例子:

a:4 5 6 1 3 7 ->a':1 3 4 5 6 7

b:5 3 2 1 7 6 ->b':1 2 3 5 6 7

c: 2 1 6 4 3 5

很明顯要求c陣列的逆序對數啊!逆序對數用什麼?樹狀陣列!

**如下:

#include #include #include #include #include #define lowbit(i) i&-i

#define maxn 100005

using namespace std;

int c[maxn],action[maxn];

int n,ans;

struct node

int main()

for(int i = 1;i <= n;i++)

sort(matchone+1,matchone+n+1);

sort(matchtwo+1,matchtwo+1+n);

for(int i = 1;i <= n;i++)

action[matchone[i].point] = matchtwo[i].point;

for(int i = 1;i <= n;i++)

cout<

NOIP2013 D1 T2火柴排隊

涵涵有兩盒火柴,每盒裝有 n 根火柴,每根火柴都有乙個高度。現在將每盒中的火柴各自排成一列,同一列火柴的高度互不相同,兩列火柴之間的距離定義為 ai bi 2 其中 ai 表示第一列火柴中第 i 個火柴的高度,bi 表示第二列火柴中第 i 個火柴的高度。每列火柴中相鄰兩根火柴的位置都可以交換,請你通...

noip2013 d1t2 火柴排隊

看不出是逆序對.感覺藥丸 首先要看出最優解就是兩個陣列均有序的時候 再對兩個陣列的下標求逆序對即可 歸併 樹狀陣列 1 include2 include3 include4 include5 include6 define modd 99999997 7using namespace std 8co...

NOIP2013D1T2 火柴排隊 題解

題目描述略 對於距離最小,其貪心策略為將兩序列公升序排序後比較。以下為簡易的證明 設對任意 a1 a2,b1 b2,第一種排布是 a1a2.b1b2.此時距離為 a1 b1 2 a2 b2 2 1 第二種排布是 a1a2.b2b1.此時距離為 a1 b2 2 a2 b1 2 2 用 1 式減去 2 ...