NOIP2017提高A組模擬7 13 第K小數

2021-08-03 19:41:34 字數 951 閱讀 3833

有兩個正整數數列,元素個數分別為n和m。從兩個數列中分別任取乙個數相乘,這樣一共可以得到n*m個數,詢問這n*m個數中第k小數是多少。

1<=n,m<=2∗

105, 1<=k<=n*m

先將兩個陣列排序。

二分答案ans。

對於a[i]找到最大的j使得a[i]*b[j]<=ans。

那麼對於a[i+1]的j一定小於對於a[i]的j,這個我們暴力掃一遍,就是o(n+m)的。

總複雜度是o(

(n+m

)∗lo

g10182

) 考場時我沒有想到這樣的做法,我想到的是o(n log n log m)的,然後也加了超級多的優化,直接過了。

code:

#include 

#include

#define ll long long

#define fo(i, x, y) for(int i = x; i <= y; i ++)

#define min(a, b) ((a) < (b) ? (a) : (b))

#define max(a, b) ((a) > (b) ? (a) : (b))

using namespace std;

const int maxn = 200005;

int n, m, v, a[maxn], b[maxn], c[maxn], d[maxn], e[maxn];

ll u, ans, ma, mb;

void read(int &x)

bool pd(ll x)

s += e[i];

rr = e[i];

if(s >= u)

}return0;}

int main() else

}printf("%lld\n", ans);

}

Noip2017提高組 乳酪

noip 2017 提高組 不怎麼難啦 思路如下 首先先寫乙個函式判斷兩個洞是否相連,即兩洞之間距離是否小於等於球直徑 注意是直徑 struct dong dong p 1001 bool pd dong a,dong b 第二個難點在於如何判斷是否可以穿過乳酪,對此我們可以模擬老鼠鑽洞 run函式...

NOIP2017提高組 列隊

noip2017提高組 day2 t3 sylvia 是乙個熱愛學習的女孩子。前段時間,sylvia 參加了學校的軍訓。眾所周知,軍訓的時候需要站方陣。sylvia 所在的方陣中有 n m 名學生,方陣的行數為 n,列數為 m 為了便於管理,教官在訓練開始時,按照從前到後,從左到右的順序給方陣中的學...

NOIP 2017 提高組 寶藏

傳送門 參與考古挖掘的小明得到了乙份藏寶圖,藏寶圖上標出了 n nn 個深埋在地下的寶藏屋,也給出了這 n nn 個寶藏屋之間可供開發的 m mm 條道路和它們的長度。小明決心親自前往挖掘所有寶藏屋中的寶藏。但是,每個寶藏屋距離地面都很遠,也就是說,從地面打通一條到某個寶藏屋的道路是很困難的,而開發...