列表

详情


NC213755. 进攻

描述

scimoon 率领的反叛军已经做好了准备

他的手下有 n 个战机,每架战机有一个破坏力 a_i

帝国有 m 个基地,每个基地有一个防御值 d_i,基地有一个价值 v_i

若一个战机的攻击力严格大于基地的防御值,则可以破坏该基地,得到这个基地的价值 v

帝国的后备资源很多,一个基地可以被反复破坏

每架战机最多只能选择一个基地攻击,当然也可以不攻击

求能获得的最大贡献

输入描述

一行两个整数, n,m 

第二行 n 个整数,表示 a_i

第三行 m 个整数,表示 d_i

第四行 m 个整数,表示 v_i

意义与题目描述中一致

输出描述

一行一个整数,表示最大价值

示例1

输入:

3 5
1 2 3
1 2 3 4 5
1 2 3 4 5

输出:

3

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 419ms, 内存消耗: 6240K, 提交时间: 2020-11-21 22:37:26

#include<bits/stdc++.h>
using namespace std;
#define MAXN 1000128
#define fo(i,a,b) for(int i=a;i<b;++i)
int a[MAXN];
pair<int,int> x[MAXN];
int main(){
    int n,m,ans=0,mx=-1000000;
    cin>>n>>m;
    fo(i,0,n)cin>>a[i];
    fo(i,0,m)cin>>x[i].first;
    fo(i,0,m)cin>>x[i].second;
    sort(x,x+m);
    sort(a,a+n);
    for(int i=0,j=0;i<n;++i){
        while(j<m&&x[j].first<a[i])mx=max(mx,x[j++].second);
        if(mx>0)ans+=mx;
    }
    cout<<ans;
    return 0;
}

Python3 解法, 执行用时: 1828ms, 内存消耗: 126828K, 提交时间: 2022-08-12 21:42:30

n,m = map(int,input().split())
a = list(map(int,input().split()))
b = list(zip(list(map(int,input().split())),list(map(int,input().split()))))
a.sort()
b.sort()
res,j,mx = 0,0,0
for i in a:
    while j < m and b[j][0] < i:
        mx = max(mx,b[j][1])
        j += 1
    res += mx
print(res)

上一题