CF1923B的题解

(一)

注意到 \(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;
}
posted @ 2024-03-27 12:22  Jerry_heng  阅读(16)  评论(0)    收藏  举报