可愛女孩的聚會 貪心

2022-05-07 04:00:10 字數 2333 閱讀 7681

本人水平有限,題解不到為處,請多多諒解

本蒟蒻謝謝大家**

題目:題目描述:

小w是乙個可愛的女孩子,她很喜歡和朋友聚會。

這次聚會有一共有n+m個人,其中有n個男孩子和m個女孩子。為了展現自己的紳士風度,每乙個男孩子都為女孩子們準備了禮物。

不過由於各個女孩子在每個男孩子心中的地位不同,因此每個男孩子給各個女孩子的禮物數量不一定相同。

現在小w知道了第個男孩子送給每個女孩子的禮物數量中最少的是ai,第j個女孩子收到的最多的禮物數量為bj,她想要知道女孩子們收到的總禮物數量最少是多少。

由於有些人的數學不好,因此可能會數錯自己的禮物數量,所以如果不存在滿足條件的情況,請輸出-1

輸入格式

第一行兩個整數,n和m。

第二行n個整數,第i個數為ai。

第三行m個整數,第i個數為bi。

輸出格式

僅一行,輸出你的答案。

樣例:

樣例輸入1

3 2

1 2 1

3 4樣例輸出1

12

樣例輸入2

2 2

0 11 0

樣例輸出2

題目大意如下:女孩們收集到的禮物最多為bj,每個男孩必須送各個女孩最少為ai,且送的禮物必須要有最少的。

樣例如下:

貪心策略: 

可以先把男生與女生的都排序一遍

為求最小,所以盡量讓最大的男生值給的最多,並且直至女生最小值(因為此時必須為男生,題目要求:必須有最少的)

我們先把其餘男生值累加

再特判一下:當女生min與男生max相等時,這時直接抵消

如果女生min與男生max不相等時,我們要讓男生的次大值變為女生min,因為此前我們已經都累加了一遍,這時差值應為(b[min]-a[次大值])

最後加上差值即可

code:

1 #include2

#define int long long

3#pragma gcc optimize(3)

4const

int n=1e6+10;5

using

namespace

std;

6int

n,m;

7int

a[n],b[n],ans,yzl;

8void

inint()

12 inline int

read()

15while(isdigit(ch))

16return x*f;17}

18 inline void write(int

x)19

24bool cmp(int a,int

b)27

signed main()

2834 sort(a+1,a+n+1

,cmp);

35for(int i=1;i<=m;i++)

38 sort(b+1,b+m+1

,cmp);

39if(a[1]>b[m])

43for(int i=1;i)

46 ans+=a[1

];47

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

50if(b[m]!=a[1])yzl=b[m]-a[2

];51

else

if(b[m]==a[1])yzl=b[m]-a[1

];52 printf("

%lld\n

",ans+yzl);

53return0;

54 }

馬斯克帶娃 心裡念著愛因斯坦的「可愛女郎」名言

特斯拉ceo elon musk 馬斯克 為微博公布動態,他正帶著兒子在帕薩迪納的敬老院彈鋼琴,他表示很高興看到他們微笑。可能是有些百無聊賴,musk在macbook上 愛因斯坦的名言 when you sit with a nice girl for two hours程式設計客棧 it seem...

可愛的猴子

可愛的猴子 時間限制 10000 ms 空間限制 65536 kb 問題描述 樹上有n只猴子。它們編號為 1 到n。1 號猴子用它的尾巴勾著樹枝。剩下的猴子都被其他的猴子用手抓著。每只猴子的每隻手可以抓住另乙隻猴子的尾巴。從0 時刻開始,每一秒都有乙隻猴子鬆開它的乙隻手。這會導致一些猴子掉到地上 它...

可愛的猴子

可愛的猴子 時間限制 10000 ms 空間限制 65536 kb 問題描述 樹上有n只猴子。它們編號為 1 到n。1 號猴子用它的尾巴勾著樹枝。剩下的猴子都被其他的猴子用手抓著。每只猴子的每隻手可以抓住另乙隻猴子的尾巴。從0 時刻開始,每一秒都有乙隻猴子鬆開它的乙隻手。這會導致一些猴子掉到地上 它...