/**
* From Jindong_s
* 2016-8-6
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <set>
#include <cmath>
using namespace std;
typedef long long LL;
const int maxn = 10007;
bool init(int n) {
if(n > 5) return false;
if(n == 1) {
printf("1 1\n");
printf("1 1\n");
}
else if(n == 2) {
printf("1 3\n");
printf("1 1\n1 2 1 3\n");
}
else if(n == 3) {
printf("2 3\n");
printf("1 2\n1 3 2 3\n1 1 2 1 2 2\n");
}
else if(n == 4) {
printf("2 5\n1 4\n1 5 2 5\n1 1 2 1 2 2\n1 2 1 3 2 3 2 4\n");
}
else if(n == 5) {
printf("3 5\n3 4\n1 4 1 5\n2 4 2 5 3 5\n2 2 2 3 3 3 3 2\n3 1 2 1 1 1 1 2 1 3\n");
}
return true;
}
void solve(int n) {
int W, H;
if(n&1) W = (n+1)/2, H = n;
else W = (n+1)/2, H = n+1;
for(int i = 7; i <= n; i += 2) {
int cnt = i-1;
int h = (cnt+1)/2-1;
for(int j = h; j >= 1; --j) {
if(j == h) printf("%d %d", j, i-1);
else printf(" %d %d", j, i-1);
}
for(int j = 1; j <= (i+1)/2; ++j) {
printf(" %d %d", j, i);
}
printf("\n");
for(int j = 1; j <= i-1; ++j) {
if(j == 1) printf("%d %d", (i+1)/2, j);
else printf(" %d %d", (i+1)/2, j);
}
printf(" %d %d\n", (i+1)/2-1, i-1);
}
}
int n;
int main() {
while(~scanf("%d", &n)) {
int W, H;
if(n&1) W = (n+1)/2, H = n;
else W = (n+1)/2, H = n+1;
if(init(n)) continue;
if(n&1) {
printf("%d %d\n3 4\n1 4 1 5\n2 4 2 5 3 5\n2 2 2 3 3 3 3 2\n3 1 2 1 1 1 1 2 1 3\n", W, H);
solve(n);
}
else {
printf("%d %d\n3 4\n1 4 1 5\n2 4 2 5 3 5\n2 2 2 3 3 3 3 2\n3 1 2 1 1 1 1 2 1 3\n", W, H);
solve(n-1);
for(int i = 1; i <= (n+1)/2; ++i)
if(i == 1) printf("%d %d", i, n);
else printf(" %d %d", i, n);
for(int i = (n+1)/2; i >= 1; --i)
printf(" %d %d", i, n+1);
printf("\n");
}
}
}
UValive 7269 (模拟)
最新推荐文章于 2020-02-06 03:05:17 发布
本文介绍了一个使用C++解决的编程挑战,通过特定的算法和数据结构来生成特定格式的矩阵输出。该挑战涉及条件判断、循环结构及基本的数学运算。
577

被折叠的 条评论
为什么被折叠?



