題目連結:
題目大意:
輸入第一列給定一正整數 N(1 ≦ N ≦ 1000000),代表兩個甜甜圈店家 x 、 y 會各推出 N 個甜甜圈來互相競賽(每個店家的單一一個甜甜圈只會參加一場比賽)。接著一列給定 N 個正整數 xi(1 ≦ xi ≦ 1000000),代表店家 x 將會「依序」派出的參賽甜甜圈之分數。再接著一列給定 N 個正整數 yi(1 ≦ yi ≦ 1000000),代表店家 y 「可以」派出的參賽甜甜圈之分數(可以按任意順序來參賽)。其中兩個店家的甜甜圈分數之給定順序皆為由小到大來給定的。
當有一甜甜圈 xi 與另一甜甜圈 yi 比較時,分數較大者為贏家、分數一樣則平手。
試問店家 y 藉由調整每個甜甜圈負責的比賽場次最多可以贏得多少場比賽?
範例輸入:
3
60 80 100
50 70 90
範例輸出:
2
解題思維:
可以看到要店家 y 要贏比賽需要派出比現在這場比賽店家 x 派出的 xi 還要大,而我們可以利用比最接近 xi 但比 xi 大的 yi 來贏得比賽(因為這樣可以讓較大的 yi 可以用於之後較大的 xi)。
例如範例輸入的
3
60 80 100
50 70 90
當我們遇到 xi = 60 時,我們可以派出 yi = 70 的那個甜甜圈、xi = 80 時可以派出 yi = 90。不過記得一個甜甜圈只能使用於一場比賽中,所以不能重複使用。因此基本上用掉某個位置 yj 的甜甜圈來應付 xi 之後因為下一個店家 x 的甜甜圈 xi+1 會大於等於 xi,因此我們只能使用 yj+1 之後(含)的甜甜圈。
而按照這樣的策略便可以得到所求最大可能贏得比賽場數。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。