Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何
Problem H. Parallel Worlds
题目连接:
http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7022&all_runs=1&action=140
Description
Alex is a Baisuralen State University student. Alex and BSU live in two parallel worlds. As we know from
school geometry classes, parallel lines do not intersect. However, in reality and unfortunately these two
parallel worlds do intersect.
There are some courses in BSU that came from hell. They make parallel worlds intersect and force Alex
to visit lectures. Or even more, they cause pain and humiliation. (It was once even said, that the other
name for course of ‘Functional Analysis’ (shortly FUN) is ‘Pain and Humiliation’. That is, FUN is not
fun.) For example, once Alex slept during such course, and was woken up by professor’s voice. Afterwards
he was asked if he had moved to Banach Space and was told to move to railway station.
Not everything is so bad, however. There are courses that are from heaven. They are finished in any mark
you want without needing to visit them.
You are requested to provide a procedure to establish that some courses are from heaven. As part of that,
you need to provide two sets of points P and Q on a plane, each containing N points. All points in P
and Q should be distinct, and the intersection of P and Q should be empty. Sets P and Q should satisfy
the following property. There should exist N pairwise nonparallel lines, such that sets of projections of P
and Q on these lines coincide. Of course, the lines should also be provided. Moreover, pairs of points that
coincide are also required.
One can show that for any positive integer N such sets of points exist.
Input
The only line of input contains a single number N (1 ≤ N ≤ 100).
Output
Output 3 × N lines.
First N lines should contain two real numbers x
P
i
y
P
i — coordinates of points in set P.
Next N lines should contain two real numbers x
Q
i
y
Q
i — coordinates of points in set Q.
Afterwards output the descriptions of the lines: three real numbers Ai
, Bi and Ci—coefficients of the ith
line (Aix + Biy + Ci = 0), and a permutation of numbers from 1 to N (qi1, qi2, . . . , qiN ) (the projection of
the first point from P should coincide with the projection of the qi1st point of the set Q, the projection
of the second point from P should coincide with the projection of the qi2nd point of Q and so on).
Absolute value of all numbers should not be greater than 106
.
The distance between any two points from P ∪ Q should be at least 1. And P ∩ Q = ∅.
Two lines are considered parallel if the angle between the lines is less than 10−2
rad., or if the cross
product AiBj − BiAj is less than 10−6
.
Two projections coincide if the distance between them is not greater than 10−6
Sample Input
1
Sample Output
0 0
1 0
1 0 0 1
Hint
题意
让你构造两个点集合,各有n个点,且不相交。
然后你需要构造n条直线
然后需要这俩集合中的点,对于每一条线,都能在直线上面的映射相同。
题解:
看着烧脑子,但实际上构造一个正2n边形就好了。
代码
#include<bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
vector<pair<double,double> >P;
vector<pair<double,double> >Q;
/* 基本几何结构 */
struct POINT
{
double x;
double y;
POINT(double a=0, double b=0) { x=a; y=b;} //constructor
};
struct LINESEG
{
POINT s;
POINT e;
LINESEG(POINT a, POINT b) { s=a; e=b;}
LINESEG() { }
};
struct LINE // 直线的解析方程 a*x+b*y+c=0 为统一表示,约定 a >= 0
{
double a;
double b;
double c;
LINE(double d1=1, double d2=-1, double d3=0) {a=d1; b=d2; c=d3;}
};
LINE makeline(POINT p1,POINT p2)
{
LINE tl;
int sign = 1;
tl.a=p2.y-p1.y;
if(tl.a<0)
{
sign = -1;
tl.a=sign*tl.a;
}
tl.b=sign*(p1.x-p2.x);
tl.c=sign*(p1.y*p2.x-p1.x*p2.y);
return tl;
}
vector<LINE>AA;
int mp[105];
int main(){
int n;
scanf("%d",&n);
if(n==1){
printf("0 0\n");
printf("1 0\n");
printf("1 0 0 1\n");
return 0;
}
double len = 10000;
double x = pi/n;
POINT AAA,BBB;
for(int i=0;i<2*n;i++){
double X = len * sin(x*i);
double Y = len * cos(x*i);
if(i%2==0){
P.push_back(make_pair(X,Y));
AAA = POINT(X,Y);
}else{
Q.push_back(make_pair(X,Y));
BBB = POINT(X,Y);
}
if(i>=1&&i<=n){
POINT A,B;
A.x = (AAA.x+BBB.x)/2.0;
A.y = (AAA.y+BBB.y)/2.0;
B.x = 0;
B.y = 0;
AA.push_back(makeline(A,B));
}
}
for(int i=0;i<n;i++)
printf("%.12f %.12f\n",P[i].first,P[i].second);
for(int i=0;i<n;i++)
printf("%.12f %.12f\n",Q[i].first,Q[i].second);
for(int i=0;i<n;i++){
printf("%.12f %.12f %.12f ",AA[i].a,AA[i].b,AA[i].c);
int a1 = i/2,b1 = (i+1)/2;
for(int j=0;j<n;j++){
mp[(a1-j+n)%n] = (b1+j)%n;
}
for(int j=0;j<n;j++)
printf("%d ",mp[j]+1);
printf("\n");
}
}
Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem H. Parallel Worlds 计算几何的更多相关文章
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem K. UTF-8 Decoder 模拟题
Problem K. UTF-8 Decoder 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c702 ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem I. Alien Rectangles 数学
Problem I. Alien Rectangles 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力
Problem F. Turning Grille 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c70 ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem C. Cargo Transportation 暴力
Problem C. Cargo Transportation 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem G. k-palindrome dp
Problem G. k-palindrome 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7022 ...
- Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem A. A + B
Problem A. A + B 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c7022&al ...
- 2010 NEERC Western subregional
2010 NEERC Western subregional Problem A. Area and Circumference 题目描述:给定平面上的\(n\)个矩形,求出面积与周长比的最大值. s ...
- 2009-2010 ACM-ICPC, NEERC, Western Subregional Contest
2009-2010 ACM-ICPC, NEERC, Western Subregional Contest 排名 A B C D E F G H I J K L X 1 0 1 1 1 0 1 X ...
- 【GYM101409】2010-2011 ACM-ICPC, NEERC, Western Subregional Contest
A-Area and Circumference 题目大意:在平面上给出$N$个三角形,问周长和面积比的最大值. #include <iostream> #include <algo ...
随机推荐
- Spring RedisTemplate操作-通道操作(10)
@Autowired @Resource(name = "redisTemplate") private RedisTemplate<String, String> r ...
- Java面试题系列(二)Java内存模型
在进行Java编程时,我们通常需要通过new创建一个对象的实例.就比如有一个People的类,那么创建一个People的实例:People w_people = new People(); 此时,ne ...
- [转载]Understanding the Bootstrap 3 Grid System
https://scotch.io/tutorials/understanding-the-bootstrap-3-grid-system With the 3rd version of the gr ...
- 也谈创业企业CEO该拿多少工资
网上看到一篇文章,关于创业公司CEO要给自己开多少工资. 当然,原文中的一些创业公司例子都过于高大上,譬如一创业就拿到A轮B轮的融资.对于这样的案例我想说的是:“太脱离人民大众创业者”. 纵观我国的I ...
- javascript命名空间
命名空间:命名空间有助于减少程序中所需要的全局变量的数量,并且同时还有助于避免命名冲突或过长的名字前缀. 板栗: var MYAPP = MYAPP || {}; MYAPP.namespace = ...
- [百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码
MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的 ...
- .gitignore 失效问题解决
对于Git,已经跟踪的文件,再加入到.gitignore中,会使忽略失效.使用下面3个命令使它重新生效 git rm -r --cached . git add . git commit -m &qu ...
- 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划
洛谷4951 地震 #include<iostream> #include<cstdio> #include<algorithm> #define go(i,a,b ...
- 【工具】用命令行与Python使用YARA规则
1.前言 YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具,使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息.现在已经被多家公司所运用于自身的产品. 2.YAR ...
- C#实现语音朗读功能
第一步:新建项目 TTS(从文本到语音(TextToSpeech)) 第二步:添加引用 System.Speech 第三步:主界面以及后台代码 using System;using System.G ...