#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(抱头痛哭)