蓝书 第一章 例题1 勇者斗恶龙

Posted 行码棋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝书 第一章 例题1 勇者斗恶龙相关的知识,希望对你有一定的参考价值。

思路:
分别将头按直径从小到大和骑士按能力从小到大排序,设置一个指向头的直径大小的标志。
对于每个骑士来说,如果骑士的能力大于头的直径,那么这个头就会被砍掉,标志就要移到下一个头上。
最后判断标志的数与总头数的大小比较,如果cur小于等于n,说明cur指向的头没有被砍掉,所有头没有被砍完。否则就可以砍完。

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 2e4+5;
ll a[N],b[N];

int main()
{
    ll n,m;
    while(cin>>n>>m)
    {
        if(n==0&&m==0) break;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int j=1;j<=m;j++) cin>>b[j];
        sort(a+1,a+1+n);
        sort(b+1,b+1+m);
        ll cur=1,s=0;
        for(int i=1;i<=m;i++)
        {
            if(b[i]>=a[cur])
            {
                s += b[i];//记录需要的金币
                if(++cur==n+1)break;//头砍完退出循环
            }
        }
        if(cur<=n)cout<<"Loowater is doomed!\\n";
        else cout<<s<<'\\n';
    }
    return 0;
}

以上是关于蓝书 第一章 例题1 勇者斗恶龙的主要内容,如果未能解决你的问题,请参考以下文章

忘了《勇者斗恶龙》,悲情亦能“酿”出好游戏

[UVA-11292] Dragon of Loowater(勇者斗恶龙) 题解

勇士斗恶龙

蓝书 第一章 例题10 正整数序列

蓝书第一章 例题3 分金币

蓝书 第一章 例题5 蚂蚁 uva