hihocoder 1627

The 2017 ACM-ICPC Asia Beijing Regional Contest 北京区域赛 B、K-Dimensional Foil

题意

给定N个点的前3维左边,和他们的欧几里得距离,求至少多少维,才能满足这个距离。

题解

施密特正交化可证明如果有解则存在下三角矩阵的解。距离平方和先减去前3维的距离平方和,这样就相当于去掉了3维。然后依次考虑每个点,看当前维度能不能满足答案,不能则加一维,再根据距离确定新加一维的值。

代码

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define mem(a,b) memset(a,b,sizeof(a))
  4. #define rep(i,l,r) for(int i=l,ed=r;i<ed;++i)
  5. #define db(x) cout<< #x <<"="<<(x)<<endl
  6. #define sqr(x) ((x)*(x))
  7. typedef long long ll;
  8. typedef long double dd;
  9. const dd EPS=1e-10;
  10. const int N=110;
  11. int n,t;
  12. dd a[N][N];//position of i_th point in j_th dimension
  13. dd d[N][N];//remain distance between i_th and j_th point
  14. int num[N];//k_th dimension first appears on num[k]_th point
  15. dd calc(int i,int j,int dim){//distance between j_th point and i_th point (dimension 0~dim)
  16. dd sum=0;
  17. rep(k,0,dim+1)
  18. sum+=sqr(a[j][k]-a[i][k]);
  19. return sum;
  20. }
  21. bool solve(){
  22. cin>>n;
  23. rep(i,0,n)
  24. rep(j,0,3)
  25. cin>>a[i][j];
  26. int flag=0;
  27. rep(i,0,n)
  28. rep(j,i+1,n){
  29. cin>>d[i][j];
  30. rep(k,0,3)d[i][j]-=sqr(a[i][k]-a[j][k]);
  31. if(d[i][j]<-EPS){
  32. flag=1;
  33. }
  34. d[j][i]=d[i][j];
  35. }
  36. if(flag)return 0;
  37. mem(a,0);
  38. mem(num,0);
  39. int k=0;
  40. rep(i,1,n){
  41. dd dis0=d[i][0];
  42. rep(j,0,k){
  43. if(a[num[j]][j]>EPS)
  44. a[i][j]=(calc(i,num[j],k)-calc(i,0,k)+d[i][0]-d[i][num[j]])/2./a[num[j]][j];
  45. dis0-=sqr(a[i][j]);
  46. if(dis0<-EPS)return 0;
  47. }
  48. if(dis0>EPS){
  49. a[num[k]=i][k]=sqrt(dis0);
  50. k++;
  51. }
  52. rep(j,0,i)
  53. if(fabs(calc(i,j,k)-d[i][j])>EPS)return 0;
  54. }
  55. // rep(i,0,n)
  56. // rep(j,0,k){
  57. // cout<<a[i][j]<<(" \n"[j==k-1]);
  58. // }
  59. cout<<k+3<<endl;
  60. return 1;
  61. }
  62. int main(){
  63. ios::sync_with_stdio(false);
  64. cin>>t;
  65. while(t--){
  66. if(!solve())cout<<"Goodbye World!"<<endl;
  67. }
  68. return 0;
  69. }

【hihocoder 1628】K-Dimensional Foil(线性代数)的更多相关文章

  1. hihocoder#1046 K个串 可持久化线段树 + 堆

    首先考虑二分,然后发现不可行.... 注意到\(k\)十分小,尝试从这里突破 首先用扫描线来处理出以每个节点为右端点的区间的权值和,用可持久化线段树存下来 在所有的右端点相同的区间中,挑一个权值最大的 ...

  2. hihocoder#1046: K个串

    [传送门] 这种区间内相同数字只能被统计一次/只有区间内数字都不相同才对答案有贡献的题都可以用扫描线扫右端点,表示当前区间右端点为$r$.然后当前线段树/树状数组维护区间左端点为$[1,r)$时对应的 ...

  3. [Machine Learning] logistic函数和softmax函数

    简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...

  4. K-D Tree

    这篇随笔是对Wikipedia上k-d tree词条的摘录, 我认为解释得相当生动详细, 是一篇不可多得的好文. Overview A \(k\)-d tree (short for \(k\)-di ...

  5. KNN及其改进算法的python实现

    一. 马氏距离 我们熟悉的欧氏距离虽然很有用,但也有明显的缺点.它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求.例如,在教育研究中,经常遇到对人的分析和判别,个体 ...

  6. Spark:聚类算法之LDA主题模型算法

    http://blog.csdn.net/pipisorry/article/details/52912179 Spark上实现LDA原理 LDA主题模型算法 [主题模型TopicModel:隐含狄利 ...

  7. GWAS | 全基因组关联分析 | Linkage disequilibrium (LD)连锁不平衡 | 曼哈顿图 Manhattan_plot | QQ_plot | haplotype phasing

    现在GWAS已经属于比较古老的技术了,主要是碰到严重的瓶颈了,单纯的snp与表现的关联已经不够,需要具体的生物学解释,这些snp是如何具体导致疾病的发生的. 而且,大多数病找到的都不是个别显著的snp ...

  8. 【论文笔记】Social Role-Aware Emotion Contagion in Image Social Networks

    Social Role-Aware Emotion Contagion in Image Social Networks 社会角色意识情绪在形象社交网络中的传染 1.摘要: 心理学理论认为,情绪代表了 ...

  9. Spark2.0机器学习系列之1: 聚类算法(LDA)

    在Spark2.0版本中(不是基于RDD API的MLlib),共有四种聚类方法:      (1)K-means      (2)Latent Dirichlet allocation (LDA)  ...

随机推荐

  1. Jury Meeting CodeForces - 854D (前缀和维护)

    Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...

  2. Xcode中控制台中打印中文处理

    xcode 10以后的方法,一般使用 #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"\n %s:%d %s\n", ...

  3. 福州大学软件工程1816 | W班 第7次作业成绩排名

    写在前面 汇总成绩排名链接 1.作业链接 第七次作业--项目需求分析(团队) 2.评分准则 本次作业映射总分为100分+贡献度得分,由以下部分组成: 引言(5 points) . 用户场景(15 po ...

  4. 软件工程(FZU2015) 赛季得分榜,第七回合

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...

  5. Docker Compose vs. Dockerfile

    Docker Compose vs. Dockerfile - which is better? - Stack Overflowhttps://stackoverflow.com/questions ...

  6. Linux查看和注销用户(User)

    Linux如何注销其他用户?_Linux教程_Linux公社-Linux系统门户网站https://www.linuxidc.com/Linux/2012-07/64939.htm linux注销指定 ...

  7. centos 检测aufs 并安装

    http://www.cnblogs.com/logo-fox/p/7366506.html 因为DeviceMapper不稳定,所以必须升级到3.10以上的内核,运行docker(2.6提示运行do ...

  8. Access使用记录

    iif函数 此函数类似编程语言中的双目运算符,官方解释如下: 在任何可以使用表达式的位置均可使用 IIf.您可以使用 IIf 确定另一个表达式为 True 还是 False.如果表达式为 True,则 ...

  9. Python3练习题 021:递归方法求阶乘

    利用递归方法求5!. 方法一 f = 1 for i in range(1,6):     f = f * i print(f)   方法二 import functools print(functo ...

  10. Azure系列2.1.11 —— CloudBlobContainer

    (小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...