B. Arpa and an exam about geometry

传送门:http://codeforces.com/contest/851/problem/B

本题是一个平面几何问题。

平面上有3个点A,B,C,坐标分别为(ax,ay),(bx,by),(cx,cy)。现以平面上一点P为中心,将点A,B,C旋转角度θ,旋转后的点分别为A’,B’,C’。试问:是否存在点P和角度θ,使得“点A’与点B重合,点B’与点C重合”?

以上条件等价于:存在点P和角度θ,使得“|PA|=|PB|=|PC|,且∠APB=BPC=θ”。

考虑点A,B,C的几何关系:

A,B,C位于同一条直线上,则不存在满足条件的点P和角度θ

A,B,C不位于同一条直线上,若存在满足条件的点P和角度θ,则由等价条件可知:△APB≌△BPC,因此|AB|=|BC|

因此,题中条件成立,当且仅当“A,B,C不共线,且|AB|=|BC|”。

A,B,C三点共线的一个充分条件是直线ABBC的斜率相等,但这是一个充分不必要条件。

A,B,C三点共线的一个充分必要条件可以通过向量形式给出:

向量α1=(Δx1y1)T,α2=(Δx2y2)T,其中Δx1=bx-axy1=by-ayx2=cx-bxy2=cy-by

若向量α1α2共线,则向量组α1,α2线性相关。设A=(α1,α2),则detA=0。

$$\det A=\left|\begin{matrix}\Delta x_1&\Delta x_2\\\Delta y_1&\Delta y_2\end{matrix}\right|=0\Leftrightarrow\Delta x_1\cdot\Delta y_2=\Delta x_2\cdot\Delta y_1$$

因此,A,B,C三点共线的一个充分必要条件是Δx1·Δy2x2·Δy1。参考程序如下:

#include <stdio.h>
#include <stdint.h> int main(void)
{
int ax, ay, bx, by, cx, cy;
scanf("%d%d%d%d%d%d", &ax, &ay, &bx, &by, &cx, &cy);
int64_t dx1 = bx - ax, dy1 = by - ay;
int64_t dx2 = cx - bx, dy2 = cy - by;
if (dx1 * dy2 == dx2 * dy1) printf("No\n");
else {
if (dx1 * dx1 + dy1 * dy1 == dx2 * dx2 + dy2 * dy2) printf("Yes\n");
else printf("No\n");
}
return ;
}

C. Five Dimensional Points

传送门:http://codeforces.com/contest/851/problem/C

本题是一个空间几何问题。

在五维空间中,有n个不同的点P1,P2,...,PnPi的坐标为(ai,bi,ci,di,ei)。现有定义:点A为bad,当且仅当存在不同于点A的点B和点C,使得向量ABAC的夹角为锐角;否则,点A为good。求{1,2,...,n}的子集S,使得对于S中的每一个元素i,均有Pi为good。

向量的夹角按照以下公式计算:$<\boldsymbol{a},\boldsymbol{b}>=\arccos \frac{\boldsymbol{a}\cdot \boldsymbol{b}}{|\boldsymbol{a}||\boldsymbol{b}|}$

而对于向量a=(a1,a2,...,ak),b=(b1,b2,...,bk),内积a·b的计算公式为: $\boldsymbol{a}\cdot\boldsymbol{b}=\sum_{j=1}^{k}{a_{j}b_{j}}$

本题直接模拟即可,时间复杂度为O(n3)。

参考程序如下:

#include <stdio.h>
#include <stdbool.h>
#define MAX_N 1000 typedef int quint[]; quint p[MAX_N], v[MAX_N][MAX_N];
int good[MAX_N]; int main(void)
{
int n;
scanf("%d", &n);
for (int i = ; i < n; i++) {
for (int k = ; k < ; k++) {
scanf("%d", &p[i][k]);
}
}
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
for (int k = ; k < ; k++) {
v[i][j][k] = p[j][k] - p[i][k];
}
}
}
int cnt = ;
for (int t = ; t < n; t++) {
bool flag = false;
for (int i = ; i < n; i++) {
for (int j = ; j < i; j++) {
int inp = ;
for (int k = ; k < ; k++) {
inp += v[t][i][k] * v[t][j][k];
}
if (inp > ) {
flag = true;
break;
}
}
}
if (!flag) {
good[cnt++] = t + ;
}
}
printf("%d\n", cnt);
for (int i = ; i < cnt; i++) {
printf("%d\n", good[i]);
}
return ;
}

Codeforces 851B/C的更多相关文章

  1. CodeForces - 851B -Arpa and an exam about geometry(计算几何)

    Arpa is taking a geometry exam. Here is the last problem of the exam. You are given three points a,  ...

  2. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  3. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  4. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  5. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  6. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  7. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  8. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  9. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

随机推荐

  1. Swift基本常识点

    import Foundation // 单行注释 // 多行注释(支持嵌套,OC是不支持的) // 常量let,初始化之后就不可改变. // 常量的具体类型可以自动识别,等号后面是什么类型,它就是什 ...

  2. python (001)----列表

    Python 的列表数据类型包含更多的方法.这里是所有的列表对象方法: list.append(x) 把一个元素添加到列表的结尾,相当于 a[len(a):] = [x]. ""& ...

  3. 使用memcachedclientXmemcached与Spring整合

    1 简单介绍 Xmemcached是一个高性能的基于java nio的memcachedclient.在经过三个RC版本号后.正式公布1.10-final版本号. xmemcached特性一览: 1. ...

  4. crm使用FetchXml分组聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月09号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  5. Codeforces Round #306 (Div. 2) A

    题意 给一个字符串(长度<=10^5).问当中有没有一个"BA"和一个"AB"呢?假设都有而且它们不反复(即ABA不算),输出YES.否则输出NO. 思路 ...

  6. 学习笔记——DISTINCT

    DISTINCT印象中向来被人诟病,说它效率低下.但网上那些SQL 面试题答案,却时有用之.其中 COUNT(DISTINCT 句式,我以前很少用,这里做个笔记. 为管理岗位业务培训信息,建立3个表: ...

  7. 【Ubuntu QQ】记如何在Ubuntu上安装QQ(附下载)

    什么困扰着一批批的ubuntu桌面用户?是麻花藤.哦不,是QQ,怎么在ubuntu上安装完美无瑕的QQ. 最佳解决方案在“三”部分,当然前两个也不失为解决方案 一.尝试的开始 配置: 双系统:Wind ...

  8. luogu1726 上白泽慧音

    题目大意 求一个有向图含节点数最多且结点编号从小到大排列字典序最小的强连通分量. 注意事项 HDU1269那道题题面.数据太弱,在这道题上把我害惨了... Dfs点u时,如果与u相连的一个点v有Dfs ...

  9. caioj1495: [视频]基于连通性状态压缩的 动态规划问题:Formula 2

    本来想写一天插头的,但是这题太难受(绝望)500+的代码量..我选择下午放松一下. 先ORZ一下苏大佬(yz的cdq啊%%%%%)居然把cdq论文里面的题抠出来出数据放在c站(呵呵真是个悲伤的故事不过 ...

  10. C# 验证数字的正则表达式集

    验证数字的正则表达式集 博客分类: 正则 正则表达式 验证数字的正则表达式集 验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d ...