【UVA - 11292】Dragon of Loowater (貪心,水題,模擬,twopointer雙指標)
阿新 • • 發佈:2018-12-09
題幹:
題目大意:
n條惡龍,m個勇士,用勇士來殺惡龍。一個勇士只能殺一個惡龍。而且勇士只能殺直徑不超過自己能力值的惡龍。每個勇士需要支付能力值一樣的金幣。問殺掉所有惡龍需要花費的最少金幣。
解題報告:
twopointer排序後從頭到尾掃一遍就行了。
AC程式碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define ll long long #define pb push_back #define pm make_pair #define fi first #define se second using namespace std; const int MAX = 2e5 + 5; int a[MAX],b[MAX]; int n,m; int main() { while(~scanf("%d%d",&n,&m)) {//n個頭 m個勇士 if(n == 0 && m == 0 ) break; for(int i = 1; i<=n; i++) scanf("%d",a+i); for(int i = 1; i<=m; i++) scanf("%d",b+i);//勇士 sort(a+1,a+n+1);sort(b+1,b+m+1); int ans = 0; int flag = 1; int i,j; for(i = 1,j=1; i<=n; i++) { while(b[j] < a[i] && j <= m) j++; if(j > m) { flag = 0;break; } ans += b[j];j++; } if(i<=n || flag == 0) puts("Loowater is doomed!"); else printf("%d\n",ans); } return 0 ; }