先给r排一遍序,然后暴力枚举每个ri是否能被更高r值的怪兽受伤并且那个怪兽没有攻击过,如果可以,那么攻击过的怪兽贴上标签,退出的怪兽r值赋值为INF,不再攻击,怪兽数量-1,如果r值最大的怪兽也攻击过了,说明没法再进行攻击,游戏结束。
r贴标签用一个bool数组存下,然后稍微优化一下整个程序即可AC民间数据
AC代码如下
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5+5,INF=2e9+7;
int n,ans,j=2,a[MAX];
bool b[MAX];
int main(){
ios::sync_with_stdio(NULL);
cin.tie(0);cout.tie(0);
cin>>n;ans=n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
for(;j<=n;j++){
if(a[i]<a[j]&&!b[j]){
ans--;
b[j]=1;
a[i]=INF;
break;
}
}
if(j>n) break;
}
cout<<ans;
return 0;
}