50分求调
查看原帖
50分求调
667622
lcokil楼主2022/10/24 13:20
#include <bits/stdc++.h>
using namespace std;
int v[500005],w[500005],a[500005];
long long  x[500005],y[500005];
double l[500005];
int m,n;
int ans=0,bianhao=0;
int cmp(int a,int y)
{
	return a>y;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i]>>v[i];
		l[i]=x[i]+v[i]*sqrt(2*y[i]/9.8);//l存落点位置 
		for(int j=i-1;j>0;j--)//找之前有没有路线重的 
		{
			if(y[i]==y[j])//纵坐标同才可能撞
				if((l[i]>=l[j]&&x[i]<x[j])||(l[i]<=l[j]&&x[i]>x[j]))//路线交叉就会撞 
					{
						w[i]++;//两落点威力加1 
						w[j]++;
						ans+=2;//总威力值 
					}				
		}
	} 
	for(int i=1;i<=n;i++)
	{
		cin>>a[i]; //a存减少伤害量 
		//伤害大于保护 不变 
		if(w[i]<a[i])//保护大于伤害 减少的是伤害的值 
			a[i]=w[i]; 
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=m;i++)
		ans-=a[i];
	cout<<ans;
	return 0;
} 

怎么才能不TLE(抱头痛哭)

2022/10/24 13:20
加载中...