codeforces 851 #432 div2 C Five Dimensional Points

2023-11-04

Problem

codeforces.com/contest/851/problem/C

Preference

Codeforces Round #432 editorial
Codeforces Round #432 (Div. 2) - C - Five Dimensional Points

Meaning

有 n 个五维空间里的点,构成点集。对于任意一个点 a,如果点集中存在任意两个不相同的点 b 和 c(也不和 a 相同),使得向量 ab ac 的夹角小于 90 ,则 a 是bad,否则 a 是good。输出所有good的点。

Analysis

在二维平面中,对任意一个点,如果它是good,那么平面中除了它之外最多只能有另外 4 的点,分别在它的:x 轴正半轴方向、负半轴方向、y 轴正半轴方向、负半轴方向上(反正就是 4 个直角,可以把坐标系旋到这种分布)。再多一个点,必然会形成小于 90 的情况。
到三维空间,就再加多两个点:z 轴正、负半轴方向上。
以此类推,五维空间里最多就只能存在另外 10 个点(加上good点自己 11 个),否则一个good点都没有。
题目判夹角小于 90 是用 arccos(x⃗ y⃗ |x⃗ ||y⃗ |) 。因为向量夹角范围是 [0,π] ,观察arccos [0,π] 的函数图像可以发现,夹角小于 90 等价于 x⃗ y⃗ >0

Code

#include <cstdio>
#include <cstring>
using namespace std;
const int N = 1000, D = 5;

int p[N][D]; // 点
int vec[N][N][D]; // vec[i][j]:向量 ij
int ans[N]; // 答案序列
bool ok[N]; // good 点为 true
bool vis[N][N]; // vec[i][j] 是否计算过

int main()
{
    int n;
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < D; ++j)
            scanf("%d", p[i]+j);
    // 多于 11 个点 -> 必无 good 点
    if(n > 11)
    {
        puts("0");
        return 0;
    }
    memset(vis, false, sizeof vis);
    memset(ok, true, sizeof ok);
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
        {
            if(i == j)
                continue;
            // 计算向量 ij 和 ji
            if(!vis[i][j])
            {
                vis[i][j] = vis[j][i] = true;
                for(int k = 0; k < D; ++k)
                {
                    vec[i][j][k] = p[j][k] - p[i][k];
                    vec[j][i][k] = -vec[i][j][k];
                }
            }
            // 判点 i 是否为 good
            for(int k = 0, dot; ok[i] && k < j; ++k)
            {
                dot = 0; // 向量 ij 和 ik 的点积
                for(int l = 0; l < D; ++l)
                    dot += vec[i][k][l] * vec[i][j][l];
                // 点积大于 0 -> 小于 90 度 -> bad
                if(dot > 0)
                    ok[i] = false;
            }
        }
    int cnt = 0;
    for(int i = 0; i < n; ++i)
        if(ok[i])
            ans[cnt++] = i + 1;
    printf("%d\n", cnt);
    for(int i = 0; i < cnt; ++i)
        printf("%d%c", ans[i], i == cnt - 1 ? '\n' : ' ');
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

codeforces 851 #432 div2 C Five Dimensional Points 的相关文章

  • ACM--田忌赛马--贪心--HDOJ 1052--Tian Ji -- The Horse Racing

    HDOJ题目地址 传送门 Tian Ji The Horse Racing Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total S
  • arctan函数加上90°;arctan(a/b)与arctan(b/a)的关系

  • 数的划分(递归)

    整数划分是另外的问题 题目描述 Description 将整数n分成k份 且每份不能为空 任意两种划分方案不能相同 不考虑顺序 例如 n 7 k 3 下面三种划分方案被认为是相同的 7 1 1 5 7 1 5 1 7 5 1 1 问有多少种
  • [ACM] 1016 Prime Ring Problem (深度优先搜索)

    Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagram Put natural number 1 2 n into
  • 概率-什么是一阶矩,二阶矩?

    根据S M 罗斯的概率论教程 一阶矩指E X 即数列X的均值称为一阶矩 以此类推 E Xn n 1 称为X的 n阶矩 也就是二阶矩 三阶矩 参考 1 图灵数学 统计学丛书08 概率论基础教程 第7版 美S M 罗斯 郑忠国 译 人民邮电出版
  • 判断一个点是否在圆内(三点确定一个圆)

    三角形的外接圆圆心是任意两边的垂直平分线的交点 三角形外接圆圆心叫外心
  • 【华为OD机试真题 python】二进制差异数【2022 Q4

    前言 华为OD笔试真题 python 本专栏包含华为OD机试真题 会实时更新收纳网友反馈 为大家更新最新的华为德科OD机试试题 为大家提供学习和练手的题库 订阅本专栏后可私信进交流群哦 题目仅供参考 千万不要照抄 题目描述 二进制差异数 对
  • 《剑指Offer》62:圆圈中最后剩下的数字(约瑟夫环)

    题目 0 1 2 n 1这n个数字排成一个圆圈 从数字0开始 每次从这圆圈你删除第m个数字 求出这个圆圈里剩下的最后一个数字 例如 0 1 2 3 4这5个数字组成一个圆圈 从数字0开始每次删除第3个数字 则删除的前4个数字依次2 0 4
  • 数学篇(二) 方差、标准差、协方差

    1 均值 均值就是将所有的数据相加求平均 求得一个样本数据的中间值 2 标准差 标准差也被称为标准偏差 公式如下所示 简单来说 标准差是一组数平均值分散成都的一种度量 一个较大的标准差 代表大部分数值和其平均值之间差异较大 一个较小的标准差
  • 2020年高教社建模国赛真题A题--炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • (邱维声)高等代数课程笔记:极大线性无关组,向量组的秩

    极大线性无关组 向量组的秩 quad 一般地 设 V V V 是数域 K K K 上的一个线性空间
  • 论文纠错(一)

    说说最近读的几篇论文的问题 果然有的论文还是不能细细地去读 一读就发现有问题 第一个是MSPCA里面的公式 7 到公式 8 那个Sr前面的2是不应该有的 也就是推导的时候出错了 第二个是GPUTENSOR里面的Gpu product的算法
  • 矩阵求导常用公式

    矩阵求导常用公式 1 引言 2 向量的导数 2 1 向量对标量求导 Vector by scalar 2 2 标量对向量求导 Scalar by vector 2 3 向量对向量求导 Vector by vector 3 矩阵的导数 3 1
  • Phase Sensitive Filter

    复数转换 如下图复数 由于 所以 这个就是复数的三角形式 这里 是模 是辅角 在讨论音频频域 即stft变换后的复数时 分别称为幅值和相位 根据欧拉公式 其中i是虚数符号 可得 这个公式可以方便地把幅值和相位还原回复数 进而做istft 将
  • Matrix calculus(矩阵微积分)(前四节)

    原文地址 https en wikipedia org wiki Matrix calculus 注 不要把它和几何运算或者是向量运算混淆 前言 在数学中 矩阵微积分是进行多变量微积分的一种特殊符号 特别是在矩阵的空间上 它将关于许多变量的
  • 完美数

    按照毕达哥拉斯的说法 数的完满取决于它的真因数 即除了自身以外的约数 例如 12的因数是 1 2 3 4 和 6 当一个数的各因数之和大于该数本身时 该数称为 盈 数 于是 12 是一个盈数 因为它的因数加起来等于 16 另一方面 当一个数
  • 天梯赛字符串替换题 “ 6翻了” Python 正则表达式替换

    输入格式 输入在一行中给出一句话 即一个非空字符串 由不超过 1000 个英文字母 数字和空格组成 以回车结束 输出格式 从左到右扫描输入的句子 如果句子中有超过 3 个连续的 6 则将这串连续的 6 替换成 9 但如果有超过 9 个连续的
  • Codeforces 1475C. Ball in Berland(二元容斥)

    题目传送门 题意 一个班级有a个男生和b个女生 现在这个班级有k对男女愿意一起出席毕业典礼 这里注意k对男女中可能会有某个男生或女生出现在多个pair中 你从这k对中找出两对 使得这两对中的男生不相同 女生不相同 即一个男生或女生不可能在一
  • 蓝桥杯 填字母游戏(博弈论)

    小明经常玩 LOL 游戏上瘾 一次他想挑战K大师 不料K大师说 我们先来玩个空格填字母的游戏 要是你不能赢我 就再别玩LOL了 K大师在纸上画了一行n个格子 要小明和他交替往其中填入字母 并且 1 轮到某人填的时候 只能在某个空格中填入L或
  • 离散数学知识点-期末复习

    目录 一 利用真值表求主析取范式 主合取范式 1 例题 二 推理证明 1 推理规则 2 例题 三 符号化命题 四 有穷集的计数 1 包含互斥原理 2 例题 1 文氏图法 2 包含互斥原理法 五 关系的闭包 1 三种闭包 2 Warshall

随机推荐

  • DocArray 和 Redis 联手,让推荐系统飞起来

    在DocArray中使用Redis后端 基于向量相似性搜索可以快速搭建一个实时商品推荐系统 现在 跟上我们的脚步 一起了解搭建系统的关键步骤 并且深入了解推荐的原理吧 推荐系统会根据用户画像 历史行为 如购买 喜欢 浏览等 给用户的兴趣建模
  • 36.求解简单的四则运算表达式,输入一个形式如“操作数  运算符  操作数”的四则运算表达式,输出运算结果

    36 求解简单的四则运算表达式 输入一个形式如 操作数 运算符 操作数 的四则运算表达式 输出运算结果 include
  • SpringCloud(注册中心)

    分布式架构与微服 restfu分格 入参的分格 rest分格 请求的分格 微服务 单体架构的应用场景 微服务的应用场景 上百个服务 服务于服务之间是有依赖关系的 什么是springcloud 当下流行的微服务 注册中心Eureka 注册中心
  • LeetCode-336.回文对、字典树、字符串翻转

    给定一组唯一的单词 找出所有不同 的索引对 i j 使得列表中的两个单词 words i words j 可拼接成回文串 示例 1 输入 abcd dcba lls s sssll 输出 0 1 1 0 3 2 2 4 解释 可拼接成的回文
  • N进制转十进制-C语言

    N进制到十进制 include
  • linux下eclipse集成tomcat(tomcatforEclipse)开发

    TomcatforEclipse http www eclipsetotale com 用linux 中的uzip 解压 zip 解压缩后 把解压后的文件夹放到 eclipse中的plugins中 插件特点 1 启动和停止Tomcat 4
  • IEnumerable和IEnumerator 详解

    初学C 的时候 老是被IEnumerable IEnumerator ICollection等这样的接口弄的糊里糊涂 我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质 下面我们先看IEnumerable和IEnu
  • Open3D Ransac点云球面拟合(python详细过程版)

    目录 一 算法原理 二 代码实现 三 结果展示 一 算法原理 见 1 Open3D 最小二乘拟合空间球 2 Open3D RANSAC三维点云球面拟合 二 代码实现 import open3d as o3d import numpy as
  • 快速排序(四)—— 非递归排序

    前面实现了快排的递归实现 并对其进行优化 但是递归需要在栈上为函数开辟空间 32位下 栈可使用的内存大小不超过2G 如果递归较深 依然可能会发生栈溢出 这个时候递归排序就不大适用 所以需要非递归出场 1 基础思路 1 新建一个队列 队列中存
  • 汇编程序设计与计算机体系结构,《汇编程序设计与计算机体系结构:软件工程师教程》 —3.2 基本元素...

    3 2 基本元素 与高级语言不同 汇编语言是一种底层语言 它的每一行代码只执行一项操作 要想写出汇编代码 必须了解与计算机体系结构有关的一些细节 例如 CPU 寄存器 标志位 以及浮点运算功能等 对于编程新手来说 通过这些底层细节编写汇编代
  • 【Windows】DNS优选(挑选最合适的DNS服务器)

    引言 笔者在之前的文章详解DNS服务 DNS解析 DNS劫持和污染中已经详细介绍过 DNS 了 今天给大家带来一款免费的 DNS 优选工具 仅适用 Windows 帮助大家提高上网速度 拒绝 DNS 劫持 获得更佳的上网体验 下载 官网地址
  • centos7下安装Hadoop伪分布式

    虚拟机或服务器准备 安装centos7的操作系统 安装过程请自行百度 查看是否可以通网络 使用ping 163 com 如果ping不通 可以修改网卡 一般在 etc sysconfig network scripts 的文件夹下 修改if
  • 网络安全之信息收集

    第一部分 被动信息收集 如果你对网络安全入门感兴趣 那么你需要的话可以点击这里 网络安全重磅福利 入门 进阶全套282G学习资源包免费分享 1 简介 在信息收集这块区域 我将其分为两部分 第一部分即被动信息收集 第二部分即主动信息收集 对于
  • zerotier源码编译注意事项

    1 事先安装好rust 后续编译中会用到cargo 2 切换镜像源后在make Rust使用国内Crates 源 rustup源 字节跳动新的 Rust 镜像源以及安装rust rust 国内源 西京刀客的博客 CSDN博客 3 如果是比较
  • 2022杭电多校(十)

    2022杭电多校 十 文章目录 2022杭电多校 十 一 比赛小结 二 题目分析及解法 基础题 1001 Winner Prediction 1003 Wavy Tree 1004 Average Replacement 1007 Even
  • idea设置包分成显示

    分层显示之前 分层设置 取消分层显示后
  • 各种系统架构图与详细说明

    原文 各种系统架构图与详细说明 共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图 上图整体展现说明包括以下几个方面 1 应用系统建设 本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发 从而建立行业的全面的应
  • 两个栈实现一个队列的功能

    1 栈 是限制的线性表插入删除必须在同一端完成 栈的特点 先进后出 入栈将数据沉入栈底 最上面的一个数据是栈顶 获取栈顶元素Top 之后要进行Pop 删除栈顶 才可以取到第二个数据 2 队列 也是对线性表的一种限定 规定插入删除数据必须在异
  • R手册(Syntax)--magrittr

    magrittr pipe lhs gt rhs forward pipe lhs为rhs第一个参数时 x gt f y 等价于 f x y lhs在任意位置时 用点 代替 z gt f x y arg 等价于 f x y arg z rh
  • codeforces 851 #432 div2 C Five Dimensional Points

    Problem codeforces com contest 851 problem C Preference Codeforces Round 432 editorial Codeforces Round 432 Div 2 C Five