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 计算几何的更多相关文章

  1. 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 ...

  2. 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 ...

  3. 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 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 2010 NEERC Western subregional

    2010 NEERC Western subregional Problem A. Area and Circumference 题目描述:给定平面上的\(n\)个矩形,求出面积与周长比的最大值. s ...

  8. 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 ...

  9. 【GYM101409】2010-2011 ACM-ICPC, NEERC, Western Subregional Contest

    A-Area and Circumference 题目大意:在平面上给出$N$个三角形,问周长和面积比的最大值. #include <iostream> #include <algo ...

随机推荐

  1. bzoj千题计划227:bzoj1486: [HNOI2009]最小圈

    http://www.lydsy.com/JudgeOnline/problem.php?id=1486 二分答案 dfs版spfa判负环 #include<queue> #include ...

  2. CSS规范 - 最佳实践--(来自网易)

    最佳选择器写法(模块) /* 这是某个模块 */ .m-nav{}/* 模块容器 */ .m-nav li,.m-nav a{}/* 先共性 优化组合 */ .m-nav li{}/* 后个性 语义化 ...

  3. [整理]WebAPI中应用oData

    http://www.odata.org/ http://bitoftech.net/category/odata/ http://www.hanselman.com/blog/CreatingAnO ...

  4. ASP.NET自定义服务器控件

    本文通过创建一个最简单的服务器控件,演示开发服务器端控件的流程. 文章内容整理自MSDN的编程指南,原文地址在文章末尾的资源中. 本文创建一个简单的服务器控件,名为 RedLabel. 它的使用方式为 ...

  5. Loadrunner里面的深入理解Resource 的 0和1

    最近在倒腾loadrunner,发现一些非常有意思的配置项,也许同学们平时去玩的时候,没有注意这些点.我也查阅了网上的帖子,说的都不够详细~操作起来的话,同学们也只是看到文字的描述,并不能发现区别.今 ...

  6. FFT(Rock Paper Scissors Gym - 101667H)

    题目链接:https://vjudge.net/problem/Gym-101667H 题目大意:首先给你两个字符串,R代表石头,P代表布,S代表剪刀,第一个字符串代表第一个人每一次出的类型,第二个字 ...

  7. linux设备驱动归纳总结(三):3面向对象思想和lseek、container_of、write、read 【转】

    linux设备驱动归纳总结(三):3.设备驱动面向对象思想和lseek的实现 转自:http://blog.chinaunix.net/uid-25014876-id-59418.html 一.结构体 ...

  8. 集合类List、Set、Map的区别、联系和遍历方式

    说集合之前,先说说数组和集合: 1.数组长度是固定的,当超过容量后会在内存中重新创建一个原来数组1.5倍长度的新数组,再把元素存进去:数组既可以存储基本数据类型,又可以存储引用数据类型. 2.集合长度 ...

  9. 再谈CentOS 7程序自启动

    上次发现了/etc/init.d下已经没有启动脚本了,然后对于启动乱序自己在rc.local中重排. 其实想一想这些应用的自启动终归还是需要通过脚本来执行的. 一.脚本在哪里? /usr/lib/sy ...

  10. opencv SVM多分类 人脸识别

    上一篇介绍了OPENCV中SVM的简单使用,以及自带的一个二分类问题. 例子中的标签是程序手动写的,输入也是手动加的二维坐标点. 对于复杂问题就必须使用数据集中的图片进行训练,标签使用TXT文件或程序 ...