来写点简单题题解放松一下
题意:
思路:
首先观察样例可以猜想几个结论:
1.导弹的位置一定是和存活的xi重合的
这点好证明,如果不重合,左边的-r,右边的不影响,重合的至少还用炮炸死了一个,一定不差
2.每次选最右边的还存活的xi炸
肯定是吧,感觉都不需要证明,和上面那个同理
3.有没有炸完只需看每次炸的位置左边那个位置即可
想一想,好像确实是这样
因此可以直接维护炸的次数,枚举一遍就好了
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=1e5+10;
const int mxe=1e5+10;
vector<int> v;
set<int> S;
int N,r;
int a[mxn];
void solve(){
S.clear();
v.clear();
cin>>N>>r;
for(int i=1;i<=N;i++){
cin>>a[i];
S.insert(a[i]);
}
for(auto it:S) v.push_back(it);
sort(v.begin(),v.end());
int x=0;
for(int p=v.size()-1;p>=1;p--){
x++;
if(x*r>=v[p-1]){
cout<<x<<'\n';
return;
}
}
x++;
cout<<x<<'\n';
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;cin>>__;
while(__--)solve();return 0;
}