天天看點

Uva 11292 The Dragon of Loowater

題意:在一個國家,m個鴨子出現了變異,變成了惡龍,國王有n個騎士,想要殺掉所有的惡龍要保護國家的安全,如果不能将其全部殺死,那麼國家便要滅亡、 給出你m個惡龍的身高,和每個騎士的身高,隻有當騎士的身高大于等于惡龍的身高,騎士才能殺死惡龍、 然而派出騎士要話費一些金額,他的金額與騎士的身高是一樣的、國王是否能殺死所有的惡龍,如果能殺死,國王想要話費最小的代價來殺死所有的惡龍、 如果殺不死惡龍國家便要滅亡輸出 Loowater is doomed! 

思路:排序+貪心  要注意的是每個騎士隻能使用一次,其他的隻需要找出大于惡龍身高的其實中身高最小的便可,如果沒有将其全部殺死那麼直接輸出Loowater is doomed! 否則輸出代價、

AC代碼:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=110000;
int n,m;
int a[maxn],b[maxn];
int vis[maxn];
int x,y,ans;
int main()
{
    while(scanf("%d %d",&m,&n)!=EOF){
        if(m+n==0)break;
        memset(vis,0,sizeof(vis));
        for(int i=0;i<m;i++)
            scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
            scanf("%d",&b[i]);
        sort(a,a+m);
        sort(b,b+n);
        x=y=ans=0;
        while(1){
            if(x==m||y==n)break;
            if(a[x]<=b[y]){
                ans+=b[y];
                vis[x]=1;
                x++,y++;
            }
            else
                y++;
        }
        int falg=0;
        for(int i=0;i<m;i++)
            if(vis[i]==0){
                falg=1;
                break;
            }
        if(falg)
            printf("Loowater is doomed!\n");
        else
            printf("%d\n",ans);
    }
    return 0;
}