洛谷 P1966 火柴排隊 思路

2022-05-12 10:53:27 字數 820 閱讀 1168

題目:

首先,乙個排列相鄰交換變成另乙個排列的交換次數就是逆序對數;

隨便畫一畫,感覺應該是排個序,大的對應大的,小的對應小的差值最小,具體證明的話應該是分類討論一下吧;

操作兩個序列可以轉化成操作乙個序列,大小對應就行了;

差點被 rk , ps 什麼的弄暈,還是因為懶不想寫離散化...

總之1a還是蠻高興的。

**如下:

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;int

const maxn=1e5+5,mod=99999997

;int

n,psb[maxn],rkb[maxn],f[maxn],rka[maxn];

ll ans,a[maxn],b[maxn];

ll rd()

while(ch>='

0'&&ch<='

9')ret=ret*10+ch-'

0',ch=getchar();

return ret*f;

}bool cmp1(int x,int y)

bool cmp2(int x,int y)

void add(int x)

int query(int x)

intmain()

printf(

"%lld\n

",ans);

return0;

}

洛谷 P1966 火柴排隊

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

洛谷P1966 火柴排隊

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

洛谷P1966 火柴排隊

火柴排隊 感覺比較順理成章地就能推出來?似乎是個一眼題 交換的話多半會往逆序對上面想,然後題目給那個式子就是拿來嚇人的根本沒有卵用 唯一的用處大概是告訴你考慮貪心一波,很顯然有兩個序列中每對排名對應的數放在同一位置上是最優策略這個結論 說詳細一點,假設 a 0 是 a 序列中的第 k 大,b 0 是...