网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

本吧头图、背景、导航顶部以及页面右侧信息由第三方提供,可能存在广告,请您仔细甄别。
之星交流吧
关注:3,931贴子:56,343
 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月28日漏签0天

百度之星大赛官方贴吧 官方邮箱:astar@baidu.com

了解更多关于之星交流>>

  • 2019百度之星Astar2019百度之星Astar
  • 2018百度之星Astar2018百度之星Astar
  • 2017百度之星Astar2017百度之星Astar
  • 2016百度之星Astar2016百度之星Astar
  • 看贴
  • 图片
    0
  • 视频
    0
  • 精品
    0
  • 1 2 下一页 尾页
  • 20回复贴,共2页
  • ,跳到 页  
<<返回之星交流吧
>0< 加载中...

求B题思路

  • 只看楼主
  • 收藏

  • 回复
  • nptwz
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
想了好久都想不出来


  • wwwaaannngggrs
  • 百度小星
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1、二分答案之后秒
2、把所有的距离排序之后用并查集秒


2026-02-28 11:22:36
广告
不感兴趣
开通SVIP免广告
  • coolypf
  • 百度小星
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
dp, O(n^3)


  • 无解的名字
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
贪心不知道对不对 坐等结果。。。


  • 贴吧用户_008PJ9J
  • 百度犇星
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
+1


  • 傻乖乖GG
  • 百度小星
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
直接贪心吧。。。 二分干么呢。。。


  • 贴吧用户_008PJ9J
  • 百度犇星
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
实际上不用殡查己吧
只要知道有多少对点的距离超过t 就行了吧


  • 傻乖乖GG
  • 百度小星
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
按s排序 并查集 贪心


2026-02-28 11:16:36
广告
不感兴趣
开通SVIP免广告
  • swgr
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
using namespace std;
double x[1000],y[1000],z[1000];
double d[1000][1000];
int root[1000];
inline double sqr(double x) { return x*x; }
int f(int x) { return root[x]==x?x:root[x]=f(root[x]); }
void u(int x, int y) { root[f(x)] = root[f(y)]; }
int main()
{
int n,k;
cin>>n>>k;
for(int i=0;i<n;i++)
cin>>x[i]>>y[i]>>z[i];
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
d[i][j] =sqr(x[i]-x[j])+sqr(y[i]-y[j])+sqr(z[i]-z[j]);
double l = 0, r = 1.0+1e-5;
while(r-l>1e-7)
{
double mid = (l+r)/2;
for(int i=0;i<n;i++) root[i] = i;
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if (d[i][j]<=mid) u(i,j);
set<int> s;
for(int i=0;i<n;i++) s.insert(f(i));
if (s.size()>=k) l=mid; else r=mid;
}
if (l>1.0) l = 1.0;
printf("%.6f\n",l);
return 0;
}



  • _shrimper
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
O(n^2 log(n))的复杂度。。。
有点悬~~


  • bainaohdu
  • 初入星途
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
二分查找都可以的?


  • hjun169
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我是先求所有的差度值,然后取第N(网页)-K(类数)+1个值,但一直内存读写错误,到最后还是wa,已到点了


  • swgr
  • 星途起步
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
格式怎么贴成这鸟样了..
#include <iostream>
#include <cstdio>
#include <cstring>
#include <set>
using namespace std;
double x[1000],y[1000],z[1000];
double d[1000][1000];
int root[1000];
inline double sqr(double x) { return x*x; }
int f(int x) { return root[x]==x?x:root[x]=f(root[x]); }
void u(int x, int y) { root[f(x)] = root[f(y)]; }
int main()
{
  int n,k;
  cin>>n>>k;
  for(int i=0;i<n;i++)
    cin>>x[i]>>y[i]>>z[i];
  for(int i=0;i<n;i++)
    for(int j=i+1;j<n;j++)
      d[i][j] = sqr(x[i]-x[j])+sqr(y[i]-y[j])+sqr(z[i]-z[j]);
  double l = 0, r = 1.0+1e-5;
  while(r-l>1e-7)
  {
    double mid = (l+r)/2;
    for(int i=0;i<n;i++) root[i] = i;
    for(int i=0;i<n;i++)
      for(int j=i+1;j<n;j++)
        if (d[i][j]<=mid) u(i,j);
    set<int> s;
    for(int i=0;i<n;i++) s.insert(f(i));
    if (s.size()>=k) l=mid; else r=mid;
  }
  if (l>1.0) l = 1.0;
  printf("%.6f\n",l);
  return 0;
}



登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 1 2 下一页 尾页
  • 20回复贴,共2页
  • ,跳到 页  
<<返回之星交流吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示