CF1254C.Point Ordering
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
This is an interactive problem.
Khanh has n points on the Cartesian plane, denoted by a1,a2,…,an . All points' coordinates are integers between −109 and 109 , inclusive. No three points are collinear. He says that these points are vertices of a convex polygon; in other words, there exists a permutation p1,p2,…,pn of integers from 1 to n such that the polygon ap1ap2…apn is convex and vertices are listed in counter-clockwise order.
Khanh gives you the number n , but hides the coordinates of his points. Your task is to guess the above permutation by asking multiple queries. In each query, you give Khanh 4 integers t , i , j , k ; where either t=1 or t=2 ; and i , j , k are three distinct indices from 1 to n , inclusive. In response, Khanh tells you:
- if t=1 , the area of the triangle aiajak multiplied by 2 .
- if t=2 , the sign of the cross product of two vectors aiaj and aiak .
Recall that the cross product of vector a=(xa,ya) and vector b=(xb,yb) is the integer xa⋅yb−xb⋅ya . The sign of a number is 1 it it is positive, and −1 otherwise. It can be proven that the cross product obtained in the above queries can not be 0 .
You can ask at most 3⋅n queries.
Please note that Khanh fixes the coordinates of his points and does not change it while answering your queries. You do not need to guess the coordinates. In your permutation ap1ap2…apn , p1 should be equal to 1 and the indices of vertices should be listed in counter-clockwise order.
输入格式
无
输出格式
You start the interaction by reading n ( 3≤n≤1000 ) — the number of vertices.
To ask a query, write 4 integers t , i , j , k ( 1≤t≤2 , 1≤i,j,k≤n ) in a separate line. i , j and k should be distinct.
Then read a single integer to get the answer to this query, as explained above. It can be proven that the answer of a query is always an integer.
When you find the permutation, write a number 0 . Then write n integers p1,p2,…,pn in the same line.
After printing a query do not forget to output end of line and flush the output. Otherwise, you will get Idleness limit exceeded. To do this, use:
- fflush(stdout) or cout.flush() in C++;
- System.out.flush() in Java;
- flush(output) in Pascal;
- stdout.flush() in Python;
- see documentation for other languages.
Hack format
To hack, use the following format:
The first line contains an integer n ( 3≤n≤1000 ) — the number of vertices.
The i -th of the next n lines contains two integers xi and yi ( −109≤xi,yi≤109 ) — the coordinate of the point ai .
输入输出样例
输入#1
6 15 -1 1
输出#1
1 1 4 6 2 1 5 6 2 2 1 4 0 1 3 4 2 6 5
说明/提示
The image below shows the hidden polygon in the example:
The interaction in the example goes as below:
- Contestant reads n=6 .
- Contestant asks a query with t=1 , i=1 , j=4 , k=6 .
- Jury answers 15 . The area of the triangle A1A4A6 is 7.5 . Note that the answer is two times the area of the triangle.
- Contestant asks a query with t=2 , i=1 , j=5 , k=6 .
- Jury answers −1 . The cross product of A1A5=(2,2) and A1A6=(4,1) is −2 . The sign of −2 is −1 .
- Contestant asks a query with t=2 , i=2 , j=1 , k=4 .
- Jury answers 1 . The cross product of A2A1=(−5,2) and A2A4=(−2,−1) is 1 . The sign of 1 is 1 .
- Contestant says that the permutation is (1,3,4,2,6,5) .