Three Arrays(二分 貪心)

2021-09-11 03:02:01 字數 745 閱讀 6291

題意描述:

給你乙個數d和三個陣列,讓你求triples(i,j,k)——表示|a[i]-b[j]|<=d&&|a[i]-c[k]|<=d&&|b[j]-c[k]|<=d。題目就是要你求有多少組i,j,k滿足triples.

題目分析:

如果直接求b陣列和c陣列中符合(a[i]-d, a[i]+d)的個數,顯然是不行的。因為無法滿足|b[j]-c[k]|<=d.所以我們先設a[i]、b[j]和c[k]中a[i]最小,那樣我們就只有找到bc陣列中滿足[a[i],a[i]+d]的個數,這樣就滿足了|b[j]-c[k]|<=d的情況,貢獻為b中個數*c中個數。然後依次算b[j]最小和c[k]最小的情況就行了。要注意的是,有可能a[i] 、b[j]和c[k]相等的情況,按上述操作會有重複,所以bc陣列的操作和a陣列的操作略微不同。

**:

#includeusing namespace std;

typedef long long ll;

int a[500005], b[500005], c[500005];

int n, a, b, c;

int main()

for(int i=0;ifor(int i=0;icout << ans << endl;

}return 0;

}

二分貪心 21

題目大概 有n堆積木,積木高度不同,每個小方塊高度相同。問,最少移動多少小方塊,使得這些積木堆高度相等。思路 先求這些積木的平均數,在把所有的高度與平均數的差值加起來,最後除2,就是最少移動的方塊數。感想 這個題有一點很坑人,最後輸出的時候有乙個小點,不注意看看不到。include include ...

二分貪心 E

題目 輸入n和c,n代表有n間屋子c代表有c頭牛,然後輸入n個數代表這n間房子的座標,牛不喜歡這個布局,一進去就會很暴躁,所以要把牛分的盡可能的遠求最近兩頭牛的最大距離。解題思路 建立乙個陣列存這些房子的座標,然後用sort將這些座標排序,然後令l 0,r a n mid l r 2,先用mid當作...

二分貪心 T

題目 有1 1,2 2,3 3,4 4,5 5,6 6大小的盒子,要把它們裝到6 6的盒子裡,它們的高度都是相同的,用最少的6 6盒子把所有尺寸的盒子都裝起來。解題思路 6 6,5 5以及4 4尺寸的物品每個物品需要占有乙個箱子,3 3的物品乙個箱子可以放4個,2 2的物品箱子可以放9個,1 1的可...