暴力求调
查看原帖
暴力求调
255077
麦克斯韦の妖楼主2022/10/24 12:37

一个最朴实的暴力,但只有 5 pts。 赛时想到了正解但因为暴力过不了大样例 4 不敢码树状数组。

调了很久(2 h +),没有发现问题,求求了!

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const double g=9.8;
const int N=5e5+10;
const double eps=1e-7;
struct Node{
	ll x,y,v;
	double pos;
	bool operator < (const Node &w) const 
	{
		return y == w.y ? x < w.x : y < w.y;
	}
}d[N];
ll p[N],a[N];
int n,m;
int tot;
int l[N],r[N];
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld%lld%lld",&d[i].x,&d[i].y,&d[i].v);
		d[i].pos=d[i].x+d[i].v*sqrt(2.0*d[i].y/g);
	}
	sort(d+1,d+1+n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&a[i]); 
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			if(d[i].y!=d[j].y) break;
			if(d[i].pos-d[j].pos>=-eps)
			{
				p[i]++,p[j]++;
			}
		}
	}
	ll sum=0;
	for(int i=1;i<=n;i++)
	{
		sum+=p[i];
		a[i]=min(a[i],p[i]);
	}
	sort(a+1,a+1+n);
	for(int i=n;i>=n-m+1;i--)
	{
		sum-=a[i];
	}
	printf("%lld\n",sum);
	return 0;
}

感觉可能是很煞笔的问题(

2022/10/24 12:37
加载中...