(一)
注意到 \(x_i\) 的绝对值 \(\le n\)。
那么统计每一个位置的血量和。
先从靠近的击杀必定最优,剩余的子弹用 \(sum\) 存储。
还是直接上代码吧。
(二)
AC 代码。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n,k,a[300010],dis[300010],s[300010];
signed main(){
ios::sync_with_stdio(0);
cin>>t;
while(t--){
cin>>n>>k;
for(int i=1;i<=n;i++)s[i]=0,cin>>a[i];
int mx=0;
for(int i=1;i<=n;i++){
cin>>dis[i],dis[i]=abs(dis[i]);
}
for(int i=1;i<=n;i++)s[dis[i]]+=a[i];
bool op=1;
int sum=0;
for(int i=1;i<=n;i++){
sum+=k-s[i];
op&=(sum>=0);
}
if(op)cout<<"YES\n";
else cout<<"NO\n";
}
return 0;
}
标签:CF1923B,int,题解,long,300010,dis
From: https://www.cnblogs.com/Jh763878/p/18098700