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");
}
}

最新文章

  1. Linux安装ftp组件过程
  2. 【原】移动web页面使用字体的思考
  3. JAVA中获取当前系统时间及格式转换
  4. 使用Graphviz绘图(一)
  5. 【代码笔记】iOS-将log日志保存到文件
  6. HDOJ1021题 Fibonacci Again 应用求模公式
  7. 开源语音识别系统 Simon
  8. Spring之ORM模块
  9. echarts立体效果地图-自定义区域及文字
  10. elixir mix 简介
  11. C# 实现身份验证之WCF篇(1)
  12. HTTP1.1协议-RFC2616-中文版
  13. Cassandra 数据模型
  14. 为什么90%的CTO 都做不好绩效管理
  15. Android 判定手机是否root
  16. 通过反射的方式注入自己的ShutdownHook并清除其他HOOK
  17. Linux CPU使用率含义及原理
  18. 怎么用mybatis
  19. BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)
  20. 网页 PHP 动态师范

热门文章

  1. bzoj千题计划192:bzoj1569: [JSOI2008]Blue Mary的职员分配
  2. Carmichael Numbers (Uva No.10006) -- 快速幂运算_埃氏筛法_打表
  3. Java面试题系列(一)描述一下JVM加载class文件的原理机制
  4. Linux中Nginx安装与配置详解
  5. LVTTL与LVCMOS区别
  6. umount /mnt/cdrom
  7. 编程入门python之定义函数【转】
  8. .NET 的 WCF 和 WebService 有什么区别?(转载)
  9. elasticsearch安装marvel插件
  10. Linux删除以减号开头的文件