2024河南邀请赛D题

就是题解的思路,很好实现

#pragma GCC optimize(3, "Ofast", "inline")

#include <bits/stdc++.h>

using namespace std;

#define yes cout << "Yes" << endl

#define no cout << "No" << endl

#define ll long long

#define ull unsigned long long

#define endl "\n"

#define lowbit(x) ((x) & (-x))

#define inf 0x3f3f3f3f

#define INF LONG_LONG_MAX

#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)

#define all(v) v.begin(), v.end()

#define pi acos(-1.0)

#define sz(a) ((int)a.size())

#define COS(x) cos(1.0 * x * pi / 180.0)

#define SIN(x) sin(1.0 * x * pi / 180.0)

#define db(v) cout << v << endl

#define FC(x) fixed << setprecision(x) // C++保留小数

#define mems(a, x) memset((a), (x), sizeof(a))

#define lc u << 1

#define rc u << 1 | 1

typedef pair<int, int> pii;

const int N=1e6+10;

double x[N],y[N];

struct noo{

       double xx,yy,chaa,cha;

}num[N];

bool cmp1(noo a,noo b){

       return a.chaa<b.chaa;

}

bool cmp2(noo a,noo b){

       return a.cha<b.cha;

}

void solve(){

       int n;cin>>n;

       for(int i=1;i<=n;i++) scanf("%lf %lf",&x[i],&y[i]);

       for(int i=1;i<=n;i++){

              double cha1=x[i]-y[i],cha2=x[i]+y[i];

              num[i]={x[i],y[i],cha1,cha2};

       }

       double ans=-1;

       sort(num+1,num+n+1,cmp1);

       // for(int i=1;i<=n;i++) cout<<num[i].xx<<' '<<num[i].yy<<'\n';

       for(int i=1;i<=n-1;i++){

              double a1=num[i].xx,b1=num[i].yy,a2=num[i+1].xx,b2=num[i+1].yy;

              // cout<<a1<<' '<<b1<<' '<<a2<<' '<<b2<<'\n';

              double t=(fabs(a1-a2)+fabs(b1-b2))/(sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2)));

              // cout<<t<<'\n';

              ans=max(ans,t);

       }

       sort(num+1,num+1+n,cmp2);

       for(int i=1;i<=n-1;i++){

              double a1=num[i].xx,b1=num[i].yy,a2=num[i+1].xx,b2=num[i+1].yy;

              double t=(fabs(a1-a2)+fabs(b1-b2))/(sqrt((a1-a2)*(a1-a2)+(b1-b2)*(b1-b2)));

              ans=max(ans,t);

       }

       printf("%.12lf\n",ans);

}

signed main()

{

#ifdef lw

       freopen("input.txt", "r", stdin);

       freopen("output.txt", "w", stdout);

#endif

       int _ = 1;

       cin >> _;

       while(_--)

       {

              // n=i;

              solve();

              // cout<<'\n';

       }

       return 0;

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值