15北京区域赛——构造——hihoCoder 1257 Snake Carper

注意是正的偶数。。不包括零

还有n=2的时候应该横着放

#include <cstdio>
#include <algorithm>
using namespace std;
void dfs(int n)
{
    if(n == 1){
        printf("1 1\n");
        return;
    }
    else if(n ==2){
        printf("1 1\n");
        printf("1 2 1 3\n");
        return;
    }
    else if(n == 3){
        printf("1 2\n");
        printf("1 1 2 1\n");
        printf("1 3 2 3 2 2\n");
        return;
    }
    else if(n % 2 == 1){
        dfs(n-3);
        int num = (n-3)*(n-2)/2;
        int col = (n-2)/2;
        int row = num/col;
        //n-2
        for(int i = 1; i <= col; i++)
            printf("%d %d ", i, row+1);
        printf("%d %d ", col+1, row+1);
        for(int i = 1; i <= col; i++){
            printf("%d %d ", col+1, row-i+1);
        }
        puts("");
        //n-1
        for(int i = 1; i <= (n-1)/2; i++)
            printf("%d %d ", col+1, i);
        for(int i = (n-1)/2; i >= 1; i--)
            printf("%d %d ", col+2, i);
        puts("");
       //n
       for(int i = 1; i <= n/2; i++)
          printf("%d %d ", col+2, (n-1)/2+i);
        printf("%d %d ", col+2, row+2);
       for(int i = 1; i <= n/2; i++)
          printf("%d %d ", col+2-i, row+2);
       puts("");
    }
    else {
       dfs(n-1);
       int num = (n-1)*n/2;
       int col = n/2;
       int row = num/col;
       for(int i = 1; i <= n/2; i++)
          printf("%d %d ", i, row+1);
       for(int i = n/2; i >= 1; i--)
           printf("%d %d ", i, row+2);
       puts("");
    }
}
int main()
{
    int n;
    while(~scanf("%d", &n)){
        int xx, yy;
        if(n % 2 == 1){
             xx = (n+1)/2;
             yy = n;
        }
        else {
             xx = n/2;
             yy = n+1;
        }
        printf("%d %d\n", xx, yy);
    dfs(n);
    }
    return 0;
}

  

时间: 2024-12-10 05:43:15

15北京区域赛——构造——hihoCoder 1257 Snake Carper的相关文章

15北京区域赛——A 二分——hihoCoder 1249 Xiongnu&#39;s Land

两次二分,第一次取得最小值,第二次往右二分看是否能到更右边 注意超出部分land部分要去掉 #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; struct edge{ int x, y, w, h; }a[10010]; bool cmp(edge A, edge B) { return A.x < B.x; } int n; ll cal(int x) { ll

构造 hihocoder 1257 Snake Carpet (15北京I)

题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / 2, 长(n + 1) * n / 2 / (n + 1) / 2的矩形; n = 5 1 2 4 4 53 2 4 4 53 3 5 5 5 n = 7 1 2 4 4 5 6 63 2 4 4 5 6 63 3 5 5 5 7 67 7 7 7 7 7 6 n = 8 1 2 4 4 5 6 6

Heshen&#39;s Account Book HihoCoder - 1871 2018北京区域赛B题(字符串处理)

Heshen was an official of the Qing dynasty. He made a fortune which could be comparable to a whole country's wealth by corruption. So he was known as the most corrupt official in Chinese history. But Emperor Qianlong liked, or even loved him so much

2015北京区域赛 Xiongnu&#39;s Land

Wei Qing (died 106 BC) was a military general of the Western Han dynasty whose campaigns against the Xiongnu earned him great acclaim. He was a relative of Emperor Wu because he was the younger half-brother of Empress Wei Zifu (Emperor Wu's wife) and

hihoCoder 1257 Snake Carpet(很简单的构造方法)

2015 ACM / ICPC 北京现场赛 I 题 构造 注意一个小坑,每条蛇的输出是要从头到尾输出的. 还要注意的是,不能开数组去模拟构造过程,然后输出,那样会TLE的. #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <algorithm> using namespace std; const int maxn=500+10; v

Hihocoder 1634 Puzzle Game(2017 ACM-ICPC 北京区域赛 H题,枚举 + 最大子矩阵变形)

题目链接  2017 Beijing Problem H 题意  给定一个$n * m$的矩阵,现在可以把矩阵中的任意一个数换成$p$,求替换之后最大子矩阵的最小值. 首先想一想暴力的方法,枚举矩阵中的数,然后$O(n^{3})$求最大子矩阵更新答案,这样复杂度是$O(n^{5})$的. 思考得再仔细一些,就是包含这个数的最大子矩阵和,以及不包含这个数的最大子矩阵的和的较大值. 设原矩阵中最大子矩阵和为$mx$. 设$u_{i}$为只考虑矩阵前$i$行的最大子矩阵和,$d_{i}$为考虑矩阵第$

北京区域赛总结

好久没写过题解和总结了...Relive!!! 热身赛的时候..三道水题我们队却只过了一道..考虑不足的是边界条件和数据范围...还有一道差分约束我到目前还没搞过...My fault... 正式赛... 开始的时候两个队友分别看到了两道水题..交给队长..A掉了...形势比较好... 然后,我觉得D题是一个比较简单的贪心题目,遂交给队长去写,WA了...看来不是贪心,但是这时候队友已经被我带到坑里了... 再后来,lyw开始写I题,一个几何题,但是情况比较繁琐,就一直在WA了... 这时候题目

HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)

这题定义了一种新的排序算法,就是把一串序列中的一个数,如果它右边的数比它小 则可以往右边移动,直到它右边的数字比它大为止. 易得,如果来模拟就是O(n^2)的效率,肯定不行 想了一想,这个问题可以被转化成 求这一串序列当中每个元素,它的右边是否存在小于它的数字,如果存在,则++ans 一开始没想到诶= = 不应该不应该 1 //#pragma comment(linker, "/STACK:16777216") //for c++ Compiler 2 #include <std

hdu 5112 (2014北京区域赛 A题)

给出某个时刻对应的速度 求出相邻时刻的平均速度 输出最大值 Sample Input23 // n2 2 //t v1 13 430 31 52 0 Sample OutputCase #1: 2.00Case #2: 5.00 1 # include <iostream> 2 # include <cstdio> 3 # include <cstring> 4 # include <algorithm> 5 # include <string>