牛客小白月赛83——小天的魔法

题目描述

小天是异世界的魔法师,这天,小天新学了两种魔法,恰好这天有一只血量 xxx 的怪物袭击魔法学院。小天为了守护魔法学院,决定使用新学的魔法挑战怪物。

魔法 111:使用 iii 号魔法 111 后,下一次魔法对怪物造成的伤害 ×ai\times a_i×ai​。同时,不能连续使用魔法 111。

魔法 222:使用 iii 号魔法 222 后,对怪物造成 bib_ibi​ 的伤害。

当怪物的血量小于 111 时,怪物就被击败了。

每一次小天可以使用 nnn 个魔法 111 和 mmm 个魔法 222 中的任意一个。 且每个魔法只能使用一次。

求击败怪物的最小魔法使用次数。

若无法击败,则输出 −1-1−1。

输入描述:

第一行三个整数 n,m,x (0≤n,m≤100,1≤x≤104)n,m,x\ (0\leq n,m\leq 100,1\leq x\leq 10^4)n,m,x (0≤n,m≤100,1≤x≤104)。

第二行 nnn 个整数表示 ai (1≤ai≤100)a_i\ (1\leq a_i\leq 100)ai​ (1≤ai​≤100)。

第三行 mmm 个整数表示 bi (0≤bi≤100)b_i\ (0\leq b_i\leq 100)bi​ (0≤bi​≤100)。

输出描述:

一行一个整数击败怪物的最小魔法使用次数。若无法击败,则输出 −1-1−1。

示例1

输入

3 3 8
1 3 2
2 1 2

输出

3
#include<iostream>
using namespace std;
int main(){
    int n,m,x;
    int a[110]={0};
    int b[110]={0};
    int t,i,j,flag;
    cin>>n>>m>>x;
    for(t=0;t<n;t++) cin>>a[t];
    for(t=0;t<m;t++) cin>>b[t];
    for(t=0;t<n-1;t++){
        flag=t;
        for(j=flag+1;j<n;j++){
            if(a[flag]<a[j]) flag=j;
        }    
        j=a[t];
        a[t]=a[flag];
        a[flag]=j;
    }
    for(t=0;t<m-1;t++){
        flag=t;
        for(j=flag+1;j<m;j++){
            if(b[flag]<b[j]) flag=j;
        }    
        j=b[t];
        b[t]=b[flag];
        b[flag]=j;       
    }
    //for(t=0;t<n;t++) cout<<a[t];
    //for(t=0;t<m;t++) cout<<b[t];
    flag=0;
    for(i=0;i<m;i++){
        if(i<n) flag=flag+a[i]*b[i];
        else flag=flag+b[i];
    }
    if(flag<x){
        cout<<-1;
        return 0;
    }else{
        if(b[0]>=x){
            cout<<1;
            return 0;
        }
        flag=i=j=0;    
        while(j<m){
            if(flag+b[j]>=x){
                flag=flag+b[j];
                j++;
            }
            else if(a[i]*b[j]>=b[j]+b[j+1]){
                flag=flag+a[i]*b[j];
                i++;
                j++;
            }else{
                flag=flag+b[j]+b[j+1];
                j=j+2;
            }
            if(flag>=x){
                cout<<i+j;
                return 0;
            }
            
            
        } 
        
    }
}

①排序 菜狗选择排序法

②计算理论max伤害是否可以可击败——达成快速-1操作

③以下一定可以击败 分类为:

        1)单步操作

                确保单步2魔法的奇数次魔法操作

        2)双步操作

                比较12魔法与22魔法伤害对比

④计算i+j值,使用魔法数值+1,因前面排序因此不用额外再设参数

水哥水哥,划水划水

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值