本人水平有限,題解不到為處,請多多諒解
本蒟蒻謝謝大家**
題目:題目描述:
小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 時刻開始,每一秒都有乙隻猴子鬆開它的乙隻手。這會導致一些猴子掉到地上 它...