北理工的恶龙

来源:互联网 发布:mac软件汉化工具 编辑:程序博客网 时间:2024/04/28 03:03

【题】

北理工的恶龙


背景:
最近,北理工出现了一只恶龙,它长着很多头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集全校所有勇士杀死这只恶龙。要杀死这只龙,必须把它所有的头都砍掉,每个勇士只能砍一个龙头,龙的每个头大小都不一样,一个勇士只有在身高不小于龙头的直径的情况下才能砍下它。而且勇士们要求,砍下一个龙头必须得到和自己身高厘米数一样的学分。校长想花 最少的学分数杀死恶龙,于是找到你寻求帮助。

输入:
第一行 龙头数 n , 勇士人数 m ( 1<=n, m<=100 ) 接下来 n 行,每行包含一个整数,表示龙头的直径 接下来 m 行,每行包含一个整数,表示勇士的身高 l

 输出:
 如果勇士们能完成任务,输出校长需要花的最小费用;否则输 出 “ bit is doomed! ”

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助测试用例 1以文本方式显示
  1. 2 3↵
  2. 5↵
  3. 4↵
  4. 7↵
  5. 8↵
  6. 4↵
以文本方式显示
  1. 11↵
1秒64M0测试用例 2以文本方式显示
  1. 2 1↵
  2. 5↵
  3. 5↵
  4. 10↵
以文本方式显示
  1. bit is doomed!↵
1秒64M0
【分析】

输入n个龙头数,然后按从小到大排序。
输入m个勇士,然后按从小到大排序。

同时从小到大遍历龙头和勇士数组,只要符合“勇士的身高不小于龙头的直径”,就把勇士的身高加到sum里。
最后,如果龙头那个数组被遍历完了,说明龙都被杀死了,则输出sum;否则输出“bit is doomed!↵”


【代码】

#include <stdio.h>#include <stdlib.h>#define N 100int dragons[N];int heros[N];//升序排列int cmp( int *a, int *b){    return *a > *b;}int main(){int i, j, m, n;scanf("%d %d", &n, &m);getchar();//输入龙头for(i = 0; i < n; i++){    scanf("%d", &dragons[i]);    getchar();}//输入勇士    for(i = 0; i < m; i++){    scanf("%d", &heros[i]);    getchar();}//龙头排序qsort(dragons, n, sizeof(int), cmp);//勇士排序qsort(heros, m, sizeof(int), cmp);/*for( i=0; i < n; i++ )printf("%3d",dragons[i]);putchar('\n');    for( i=0; i < m; i++ )printf("%3d",heros[i]);    */    int cost = 0;                        //校长的花费    int dragon_count = n;                  //剩余龙头数    for(i = 0; i < m; i++)    {        for(j = 0; j < n; j++)        {            if(dragons[j] != -1 && heros[i] != -1 && heros[i] >= dragons[j])            {                cost += heros[i];                dragons[j] = -1;    //赋值为-1,表示龙[j]已被杀死                dragon_count--;     //龙头数自减1                heros[i] = -1;      //赋值为-1,表示勇士[i]已经杀过龙            }        }    }    if(dragon_count > 0)        printf("bit is doomed.\n");    else        printf("%d\n", cost);return 0;}