暴力50分求助
查看原帖
暴力50分求助
540658
雪夜yukiyo楼主2022/10/23 18:35
#include<bits/stdc++.h>
#define yukiyo sb
using namespace std;
int n,m,ans;
const double g=9.8;
struct dan{
	int xi,yi,a,v,p;
	double xt;
}d[500005];
inline double dis(int y,int v1,int v2){
	return (v1-v2)*sqrt(2*y/g);
}
bool cmp1(dan x,dan y){
	return x.yi==y.yi?x.xi<y.xi:x.yi<y.yi;
}
bool cmp2(dan x,dan y){
	return x.p>y.p;
}
int main(){
	//freopen("missile4.in","r",stdin);
	//freopen("missile4.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d%d%d",&d[i].xi,&d[i].yi,&d[i].v);
	}
	for(int i=1;i<=n;i++) scanf("%d",&d[i].a);
	sort(d+1,d+1+n,cmp1);
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(d[i].yi!=d[j].yi) break;
			if((d[i].v<=0&&d[j].v>=0)||d[i].v<d[j].v) continue;
			if(dis(d[i].yi,d[i].v,d[j].v)>=abs(d[i].xi-d[j].xi)) d[i].p++,d[j].p++;
		}
		//cout<<d[i].p<<" ";
	}
	for(int i=1;i<=n;i++){
		//cout<<d[i].v<<" "<<d[i].p<<"  ";
		ans+=d[i].p;
		d[i].p=min(d[i].p,d[i].a);
	}
	sort(d+1,d+1+n,cmp2);
	for(int i=1;i<=m;i++){
		ans-=d[i].p;
	}
	cout<<ans<<endl;
    return 0;
}

感觉是 n^2的问题但是不知道怎么改

2022/10/23 18:35
加载中...