题目

分析

考虑二分答案,

二分小数显然是不可取的,那么我们将所有可能的答案求出来,记录在一个数组上,排个序(C++调用函数很容易超时,手打快排,时间复杂度约为\(O(>8*10^7)\),但相信梦想的力量)。

剩下就简单了,将二分出的值判断是否可以获得k分以上,

这里可以用多种方法,spfa、dp

dp:

\(dp_i\)表示移动到了第i个点的最大分数

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
const long long mo=1000000007;
const long long N=2005;
using namespace std;
long long ans,a[N][3],n,m,tot,f[N];
double sum[N][N];
struct ddx
{
long long a,b,c;
double ans;
}d[N*N];
double cale(ddx x)
{
return 1.0*x.a*sqrt(x.b)/x.c;
}
bool cmp(ddx x,ddx y)
{
return x.ans<y.ans;
}
void q(int l,int r)
{
int i=l,j=r,e1;
double mid=d[(l+r)/2].ans;
double e;
while(i<j)
{
while(d[i].ans<mid) i++;
while(d[j].ans>mid) j--;
if(i<=j)
{
e1=d[i].a;
d[i].a=d[j].a;
d[j].a=e1; e1=d[i].b;
d[i].b=d[j].b;
d[j].b=e1; e1=d[i].c;
d[i].c=d[j].c;
d[j].c=e1; e=d[i].ans;
d[i].ans=d[j].ans;
d[j].ans=e;
i++;
j--;
}
}
if(i<r) q(i,r);
if(l<j) q(l,j);
}
bool ok(double x)
{
memset(f,0,sizeof(f));
for(long long i=1;i<=n;i++)
{
for(long long j=0;j<=i-1;j++)
{
if(sum[i][j]<=x)
{
f[i]=max(f[i],f[j]+1);
}
}
if(f[i]>=m)
return true;
}
return false;
}
long long gcd(long long x,long long y)
{
return x==0?y:gcd(y%x,x);
}
int work(int x)
{
for(long long i=sqrt(d[x].b);i>=1;i--)
{
if(d[x].b%(i*i)==0)
{
d[x].b/=i*i;
d[x].a*=i;
break;
}
}
long long k=gcd(d[x].a,d[x].c);
if(!k) return 0;
d[x].a/=k;
d[x].c/=k;
}
double rf(long long l,long long r)
{
while(l<r)
{
long long mid=(l+r)/2;
if(ok(d[mid].ans))
r=mid;
else
l=mid+1;
}
work(l);
printf("%lld %lld %lld",d[l].a,d[l].b,d[l].c);
}
int main()
{
scanf("%lld%lld",&n,&m);
for(long long i=1;i<=n;i++)
for(long long j=0;j<=2;j++)
{
scanf("%lld",&a[i][j]);
}
for(long long i=0;i<=n-1;i++)
for(long long j=i+1;j<=n;j++)
{
d[++tot].a=1;
d[tot].b=(a[j][1]-a[i][1])*(a[j][1]-a[i][1])+(a[j][2]-a[i][2])*(a[j][2]-a[i][2]);
d[tot].c=a[j][0]-a[i][0];
d[tot].ans=cale(d[tot]);
sum[i][j]=sum[j][i]=d[tot].ans;
}
q(1,tot);
rf(1,tot);
}

最新文章

  1. OGNL相关代码
  2. List subList(startIndex, endIndex);
  3. maven部署tomcat项目,403错误解决
  4. sql raiseerror
  5. 轻松学习Linux之自动执行任务
  6. 微软Azure云主机及blob存储的网络性能测试
  7. JSP 实现 之 调用java方法实现MySQL数据库备份和恢复
  8. jQuery之动画效果
  9. c#中的数据类型简介(委托)
  10. LeetCode OJ 120. Triangle
  11. drawRect &amp; layoutSubviews 调用时间
  12. 文件File
  13. java虚拟机和java内存区域概述
  14. 14 fragment传值
  15. 【English】十四、英语
  16. Navicat premium 12破解版
  17. STM32F103 ------ 时钟配置
  18. linux----------阿里云服务器使用过程中遇到的各种问题以及解决渠道
  19. 面试 -- requestLayout、invalidate与postInvalidate区别
  20. 面向切面编程AOP,一些通用装饰器

热门文章

  1. asp.net mvc model attribute and razor and form and jquery validate 完美结合
  2. 关于使用unittest单元测试框架的一些问题集
  3. 【Angular5】 返回前一页面 go back to previous page
  4. 【转】应用宝基于Robotium自动化测试
  5. 高性能异步分布式事务TCC框架(资料汇总)
  6. DNS服务器搭建笔记
  7. Android中res下anim和animator文件夹区别与总结
  8. 程序员称为高手的10条心得(摘自http://www.jizhuomi.com/software/394.html)
  9. 【Java】 Java反射机制总结
  10. java冒泡排序小实例