这次s组模拟赛t1为什么只有5分?明明三个样例都对了。。。t2省选难度我都给搞到了14分。t1思路:由于只有y坐标一样高的导弹才有可能相撞,所以对每一个y离散化后分组判断。大佬帮忙看一下行吗?谢谢了。
#include<bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
struct missile{
double x,y,v,p,X;
}g[N];
int n,m,h;
double ans,aa[N];
map <double,int> st;
vector <int> hg[2 * N];
bool cmp(missile P,missile Q){
return P.p > Q.p;
}
//clock_t s,e;
int main(){
//freopen("m.in","r",stdin);
//freopen("m.out","w",stdout);
//s = clock();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lf%lf%lf",&g[i].x,&g[i].y,&g[i].v);
g[i].p = 0;
g[i].X = g[i].x + g[i].v * sqrt(g[i].y / 4.9);
if(!st[g[i].y]) st[g[i].y] = ++ h;
hg[st[g[i].y]].push_back(i);
}
for(int i=1;i<=n;i++) scanf("%lf",&aa[i]);
for(int i=1;i<=h;i++){
for(int j=0;j<hg[i].size();j++){
int a = hg[i][j];
for(int k=j+1;k<hg[i].size();k++){
int b = hg[i][k];
if((g[a].x <= g[b].x && g[a].X >= g[b].X) || (g[a].x >= g[b].x && g[a].X <= g[b].X)){
g[a].p ++,g[b].p ++;
}
}
}
}
sort(g + 1,g + n + 1,cmp);
for(int i=1;i<=n;i++){
ans += g[i].p;
if(i <= m){
if(aa[i] >= g[i].p) ans -= g[i].p;
else ans -= aa[i];
}
}
//e = clock();
cout<<ans<<endl;
//cout<<(double)(e - s) / CLOCKS_PER_SEC<<endl;
return 0;
}