首页 > 其他分享 >洛谷题单指南-递推与递归-P1498 南蛮图腾

洛谷题单指南-递推与递归-P1498 南蛮图腾

时间:2024-02-22 11:22:56浏览次数:19  
标签:__ int 洛谷题 tt 图案 复制 P1498 递推

原题链接:https://www.luogu.com.cn/problem/P1498

题意解读:

观察样例,可以发现,当n = 1时,得到最基础的图案:

 /\
/__\

当n = 2时,将基础图案向下复制两个,并排,然后将之前的图案移到居中的位置

   /\
  /__\
 /\  /\
/__\/__\

当n = 3时,再将n = 2时的图案向下复制两个,并排,然后将之前的图片移动居中的位置

       /\
      /__\
     /\  /\
    /__\/__\
   /\      /\
  /__\    /__\
 /\  /\  /\  /\
/__\/__\/__\/__\

因此,可以从基础图案出发,按照以上过程,复制n - 1次,即可得到结果。

解题思路:

观察得知,图案的高度为2^n,图案的宽度为2^(n + 1),n最大是10,因此高度最大1024,宽度最大2048

用一个char tt[2000][3000]足够存储所有的字符

初始时,需要将tt所有元素初始化为空格

再填充上基础图案

每次复制时,先在下方复制两个图案,然后把原图案清空,最后把下方的一个图案复制回原图案的位置,但要能保证居中对齐

具体操作请参考代码注释。

100分代码:

#include <bits/stdc++.h>
using namespace std;

char tt[2000][3000]; //高度最多1024,宽度最多2048
int n;

int main()
{
    cin >> n;

    memset(tt, ' ', sizeof(tt)); //每个字符都初始化为空格

    //初始化n=1的情况
    tt[1][1] = ' ', tt[1][2] = '/', tt[1][3] = '\\', tt[1][4] = ' ';
    tt[2][1] = '/', tt[2][2] = '_', tt[2][3] = '_', tt[2][4] = '\\';

    int h = 2, w = 4; //高度h,宽度w
    for(int i = 1; i < n; i++) //复制n-1次
    {
        for(int j = 1; j <= h; j++) //向下复制2个并排
        {
            for(int k = 1; k <= w; k++)
            {
                tt[j + h][k] = tt[j + h][k + w] = tt[j][k];
                tt[j][k] = ' '; //清空原来的图案
            }
        }

        for(int j = 1; j <= h; j++) //向上复制一个,居中对齐
        {
            for(int k = 1; k <= w; k++)
            {
                tt[j][k + w / 2] = tt[j + h][k];
            }
        }

        h *= 2, w *= 2;
    }

    //输出结果
    for(int i = 1; i <= h; i++)
    {
        for(int j = 1; j <= w; j++) cout << tt[i][j];
        cout << endl;
    }
    
    return 0;
}

 

标签:__,int,洛谷题,tt,图案,复制,P1498,递推
From: https://www.cnblogs.com/jcwy/p/18025834

相关文章

  • 洛谷题单指南-递推与递归-P1228 地毯填补问题
    原题链接:https://www.luogu.com.cn/problem/P1228题意解读:用4种毯子铺满2^k*2^k的区域,留出一个公主位置,输出所有毯子拐角的坐标以及哪种毯子,看起来有点无从下手,可以从k=1,k=2,k=3入手去依次考虑,找到规律,用分治法解决。解题思路:1、当k=1时,即2*2的区域,对于任意一个位置是公主,都......
  • 洛谷题单指南-递推与递归-P1010 [NOIP1998 普及组] 幂次方
    原题链接:https://www.luogu.com.cn/problem/P1010题意解读:输出一个正整数的2的幂次方表示,需要用到二进制数学知识,将整数拆解成2的次幂之和,幂次方也要进行拆解,因此容易想到通过递归处理。解题思路:先看样例,给定整数137,要拆解成2的幂次方之和,先考虑i使得刚好137>=2^i时,i取7,因此2......
  • 洛谷题单指南-递推与递归-P1259 黑白棋子的移动
    原题链接:https://www.luogu.com.cn/problem/P1259题意解读:要打印最终的状态,关键在找到一些变化的规律,直接的暴力搜索复杂度太高。解题思路:从样例出发ooooooo*******--oooooo--******o*oooooo******--o*ooooo--*****o*o*ooooo*****--o*o*oooo--****o*o*o*oooo****--o*o*o*ooo--......
  • 洛谷题单指南-递推与递归-P3612 [USACO17JAN] Secret Cow Code S
    原题链接:https://www.luogu.com.cn/problem/P3612题意解读:字符串加长的时候,是先把最后一个字符接上,再拼接其余字符,注意不是翻转,要找第n个字符,就要看字符串加长几次后长度能超过n,然后在加长后的字符串中找第n个字符。解题思路:如果直接通过模拟法,字符串长度太长,且要找的第n个数......
  • 洛谷题单指南-递推与递归-P1990 覆盖墙壁
    原题链接:https://www.luogu.com.cn/problem/P1990题意解读:用两种可旋转的形状铺满N*2的区域,求方案数,可以使用递推。解题思路:步骤1、设f[i]表示铺满i*2的区域的方案数根据要求,i*2区域最后一列有4种可能的铺法:如果采用图1铺法,则有f[i]=f[i-1]如果采用图2铺法,则有f[i]=f......
  • 洛谷题单指南-递推与递归-P1164 小A点菜
    原题链接:https://www.luogu.com.cn/problem/P1164题意解读:要求正好把钱花完,并且统计不同的点菜方案数,本质上是一个背包问题,给定背包体积,要求物品正好装满背包的方案数。解题思路:1、最直观的解法是暴搜:DFS枚举每一道菜,有点或者不点两种选择,并且累加上已花费的总金额递归前,判断......
  • 洛谷题单指南-递推与递归-P2437 蜜蜂路线
    原题链接:https://www.luogu.com.cn/problem/P2437题意解读:根据题目要求,只能从标号小的蜂房爬到标号大的相邻蜂房,即每次要么爬到+1的蜂房,要么爬到+2的蜂房,本质上是一个斐波那契数列问题,和数楼梯问题一样。解题思路:要求从m号蜂房到n号蜂房的路径,即走n-m级楼梯的方案,n最大1000,同样......
  • 洛谷题单指南-递推与递归-P1928 外星密码
    原题链接:https://www.luogu.com.cn/problem/P1928题意解读:要对形如xxx[Nxxx]xxx的字符串进行解码,[]内第一个数表示括号中字符串重复的次数,可以嵌套。解题思路:用递归进行处理,设函数decode(start,end)将下标从start到end之间字符串进行解码递归过程如下:遍历start~end的每一个字......
  • Codeforces Round 113 (Div. 2)E. Tetrahedron(dp、递推)
    目录题面链接题意题解代码总结题面链接E.Tetrahedron题意从一个顶点出发走过路径长度为n回到出发点的方案总数题解考虑dp\(f[i][0|1|2|3]\):走了i步,现在在j点的方案总数转移:\(f[i][0]=f[i-1][1]+f[i-1][2]+f[i-1][3]\)\(f[i][1]=f[i-1][0]+f[i-1][2]+f[i-1][3]\)\(f......
  • 洛谷题单指南-递推与递归-P1464 Function
    原题链接:https://www.luogu.com.cn/problem/P1464题意解读:虽然a、b、c可输入的范围比较大,但是递归中,只会限制在0-20以内,由于递归中有大量的重复计算,因此需要采用记忆化搜索来保存已经计算过的递归函数值。解题思路:定义三位数组LLmem[25][25][25],mem[a][b][c]保存w(a,b,c)的......