Sicily 1697. Golygon

1697. Golygon

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB , Special Judge

Description

Golygon is an interesting type of simple polygon. If a golygon with n edges exist, then we can draw it out on the Cartesian plane using the following procedure: 

       Starting at the origin, set the initial direction to north(or east, south, west), then go straightforward 1 unit, choose to turn left or right, and then go straightforward 2 units, choose to turn left or right again, and then go straightforward 3 units, choose to turn left or right the third time, …., and then go straightforward n units, and choose to turn left or right the n-th time, if the path has returned to the origin and the current direction is the same as the initial direction, and there is no crossing in the whole path, then the resulting polygon is a golygon with n edges. The following picture shows a sample golygon with 8 edges. This golygon can be described by the vertices sequence: (0,0), (0,1), (2,1), (2,-2), (-2,-2), (-2,-7), (-8, -7), (-8,0). 

Of course there is no guarantee that a golygon with n edges always exists. And even if it exists, when you’re trying to follow the above procedure to draw it out, you must carefully determine how to change your direction each time, otherwise the resulting figure will not be a valid golygon.

       Now, given the number of edges, n, please determine whether such a golygon exists or not, and if it really exists, please describe the vertices sequence of a sample one.

Input

Input contains several test cases. The first line is a single integer, T (1<=T<=20), indicating the number of cases. Each case has only one line containing an integer, N (1<=N<=10000), the number of edges of the golygon.

Output

For each case, if the desired golygon does not exist, just output “NO”, otherwise please output “YES”, followed by the vertices sequence of a sample golygon, one vertex per line. Each vertex is described by two integers x and y, the x-coordinate and y-coordinate. These two integers are separated by a single space. The first vertex must be (0, 0). There may be several solutions, any of them is acceptable. 

Sample Input

41248

Sample Output

NONONOYES0 00 12 12 -2-2 -2-2 -7-8 -7-8 0

// Problem#: 1697
// Submission#: 3589003
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include 

int main() {
    int T, n, x, y, i;
    scanf("%d", &T);
    while (T--) {
        scanf("%d", &n);
        if (n % 8 == 0) {
            printf("YES\n");
            x = 0, y = 0;
            for (i = 0; i < n / 4; i += 2) {
                printf("%d %d\n", x, y);
                y += i + 1;
                printf("%d %d\n", x, y);
                x += i + 2;
            }
            for (i = n / 4; i < 3 * n / 4; i += 2) {
                printf("%d %d\n", x, y);
                y -= i + 1;
                printf("%d %d\n", x, y);
                x -= i + 2;
            }
            for (i = 3 * n / 4; i < n; i += 2) {
                printf("%d %d\n", x, y);
                y += i + 1;
                printf("%d %d\n", x, y);
                x += i + 2;
            }
        } else printf("NO\n");
    }
    return 0;
}                                 


你可能感兴趣的:(sicily)