AcWing 4171. 智力大冲浪
原题链接
简单
作者:
little奔奔
,
2024-03-13 17:46:35
,
所有人可见
,
阅读 16
C++ 代码
#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <stdio.h>
using namespace std;
struct Node{
int t;
int m;
};
bool cmp(Node a, Node b){
if(a.m > b.m)
return true;
else if(a.m < b.m)
return false;
else if(a.t == b.t){
return a.m < b.m;
}
}
int main(){
int m,n;
cin >> m >> n;
Node a[n+1];
for(int i = 1; i <= n; i++ )
cin >> a[i].t;
for(int i = 1; i <= n; i++ )
cin >> a[i].m;
sort(a+1,a+n+1,cmp);
int max = 0;
for(int i = 1; i <= n; i++ ){
if(max < a[i].t)
max = a[i].t;
}
int j = 1,sum = 0,fsum = 0,dsum = 0,use[max+1] = {0};
for(int i = 1; i <= n; i++ )
sum += a[i].m;
while(j <= n){
if(use[a[j].t] == 0){
use[a[j].t] = 1;
dsum += a[j].m;
j++;
}
else{
if(a[j].t > 1)
a[j].t--;
else
j++;
}
}
fsum = sum - dsum;
cout << m - fsum << endl;
return 0;
}