hihocoder 1627

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

题意

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

题解

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

代码

#include <bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#define rep(i,l,r) for(int i=l,ed=r;i<ed;++i)
#define db(x) cout<< #x <<"="<<(x)<<endl
#define sqr(x) ((x)*(x)) typedef long long ll;
typedef long double dd;
const dd EPS=1e-10;
const int N=110;
int n,t;
dd a[N][N];//position of i_th point in j_th dimension
dd d[N][N];//remain distance between i_th and j_th point
int num[N];//k_th dimension first appears on num[k]_th point
dd calc(int i,int j,int dim){//distance between j_th point and i_th point (dimension 0~dim)
dd sum=0;
rep(k,0,dim+1)
sum+=sqr(a[j][k]-a[i][k]);
return sum;
}
bool solve(){
cin>>n;
rep(i,0,n)
rep(j,0,3)
cin>>a[i][j];
int flag=0;
rep(i,0,n)
rep(j,i+1,n){
cin>>d[i][j];
rep(k,0,3)d[i][j]-=sqr(a[i][k]-a[j][k]);
if(d[i][j]<-EPS){
flag=1;
}
d[j][i]=d[i][j];
}
if(flag)return 0;
mem(a,0);
mem(num,0);
int k=0;
rep(i,1,n){
dd dis0=d[i][0];
rep(j,0,k){
if(a[num[j]][j]>EPS)
a[i][j]=(calc(i,num[j],k)-calc(i,0,k)+d[i][0]-d[i][num[j]])/2./a[num[j]][j];
dis0-=sqr(a[i][j]);
if(dis0<-EPS)return 0;
}
if(dis0>EPS){
a[num[k]=i][k]=sqrt(dis0);
k++;
}
rep(j,0,i)
if(fabs(calc(i,j,k)-d[i][j])>EPS)return 0;
}
// rep(i,0,n)
// rep(j,0,k){
// cout<<a[i][j]<<(" \n"[j==k-1]);
// }
cout<<k+3<<endl;
return 1;
}
int main(){
ios::sync_with_stdio(false);
cin>>t;
while(t--){
if(!solve())cout<<"Goodbye World!"<<endl;
}
return 0;
}

【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. 二次剩余从csdn

    欧拉准则 模\(p\)意义下,\(a\)是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv 1\),\(a\)不是二次剩余等价于\(a^{\frac{p-1}{2}}\equiv -1 ...

  2. Python之json使用

    一.概念 json是一种通用的数据类型,任何语言都认识 接口返回的数据类型都是json 长得像字典,形式也是k-v { } 其实json是字符串 字符串不能用key.value来取值,要先转成字典才可 ...

  3. 解决linux用户切换失败 su:execute /usr/bin 没有权限

    问题描述: 回宿舍前,在root用户中安装fish,并修改其shell为fish.回宿舍之后,在图形界面用root用户进行登陆,莫名其妙登陆失败.没有任何提示信息,直接回到登陆界面.用非root用户登 ...

  4. async并发处理

  5. vue路由的知识点

    this.$router.push({name:'login',query:{name:'ww',age:18}}) 传数据 this.$route.query 拿数据 meta:{ "dl ...

  6. Html5使用canvas作图

    以下例子是项目中实际用到的.不足之处请大家指正,设计到画线,写文字,填充,文字旋转. <!DOCTYPE html> <html> <head lang="en ...

  7. 使用cmd命令删除文件夹下所有文件

    rmdir 删除整个目录 好比说我要删除 222 这个目录下的所有目录和档案,这语法就是: rmdir /s/q 222 其中: /s 是代表删除所有子目录跟其中的档案. /q 是不要它在删除档案或目 ...

  8. linux命令logger使用

    先从别的地方抄过来全部的解释,如下: **options (选项):** -d, --udp 使用数据报(UDP)而不是使用默认的流连接(TCP) -i, --id 逐行记录每一次logger的进程I ...

  9. python django 的环境搭建(centos)

    一.安装好nginx 二.安装uwsgi yum install python-devel -y pip3 install uwsgi #测试启动django /usr/local/python3/b ...

  10. 5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用 ...