我真的不理解
  • 板块学术版
  • 楼主halehu
  • 当前回复9
  • 已保存回复9
  • 发布时间2022/10/23 18:27
  • 上次更新2023/10/27 06:16:13
查看原帖
我真的不理解
365777
halehu楼主2022/10/23 18:27

这次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;
}
2022/10/23 18:27
加载中...