第三届全国中医药院校大学生程序设计竞赛(部分题解)更新中~
绿地装饰
题目描述
湖南中医药大学坐落于中国历史文化名城长沙,是湖南省重点建设本科院校,是全国首批设立国家级重
点学科的高校,也是首批招收博士研究生、留学生及港澳台学生的中医药院校。学校现有 2 个校区,占
地面积 1393 亩,建筑面积 52 万平方米,主校区依岳麓南坡,临湘江西岸,环境幽雅,风光秀丽,是求
学成才的理想之地。
校园景观设计师小 W 的主要工作就是植被环境的设计维护,他有一个 N×N 的模板图,他创作景观的步
骤如下:
1、将当前的绿地分成 N×N 小块,再按照模板图添加装饰(黑色表示有装饰,白色表示没有);
2、对于每个白色(未被装饰)的地块,递归操作 1,应用模板图,即分成更小的 N×N 块,继续进行装
饰,而黑色(已装饰)的地块则不必操作。
下图是某次装饰过程的示意图。
现在你的任务是求出 K 次递归后的绿地状态。
输入
单组数据。
第一行两个数 N,K,如题意中的描述。
接下来是一个 N×N 的模板图,’ . ’ 表示白色,’ * ’ 表示黑色。
2 ≤ n ≤ 3
1 ≤ k ≤ 5
输出
输出一个 N K×N K 的矩阵表示答案,不允许有多余的空行或空格。
样例输入
2 3
.*
..
样例输出
.*******
..******
.*.*****
....****
.***.***
..**..**
.*.*.*.*
........
ps:
这个题目刚刚看的时候以为就是一个简单的递归,后面实打实的被打脸,发现自己不会做。所以偷偷看大佬的题解,这个题目真心不错,看完之后久久不能~,所以特地来写一篇详细的题解。首先详细讲解一下非递归的代码,看完题目我们本能的想到用递归去做,确实,这非常符合递归,但是我想先说一下非递归的代码,因为这段代码花了我很长时间来理解。这段代码最主要的思想就是通过一个点构造一个2*2的矩阵,因为矩阵的大小是以2倍增长的,附上本人手工图, 第一次画,所以很丑很丑,溜了。
上面的图所代表的的思想就是下面代码实现的
#include <bits/stdc++.h>
using namespace std;
char w[300][300], ans[300][300], ww[8][8];
int main()
{int n, k, m;while (~scanf("%d%d", &n, &k)){for (int i = 0; i < n; ++i)scanf("%s", ww[i]);w[0][0] = '.'; //初始化m = 1; //从一个点开始while (k--){for (int i = 0; i < m; ++i)for (int j = 0; j < m; ++j)if (w[i][j] == '.') //一个点变成四个点,每个点只做好自己的事就可以了{for (int a = 0; a < n; ++a)for (int b = 0; b < n; ++b)ans[i * n + a][j * n + b] = ww[a][b];}else{for (int a = 0; a < n; ++a)for (int b = 0; b < n; ++b)ans[i * n + a][j * n + b] = '*';}m = m * n; //每次变换都是原先的两倍for (int i = 0; i < m; ++i)for (int j = 0; j < m; ++j)w[i][j] = ans[i][j]; //把得到的结果赋给另一个数组方便下一次变换}for (int i = 0; i < m; ++i)printf("%s\n", ans[i]);}return 0;
}
递归
递归算法真的很难懂,只能自己理解!!!
将问题递归下去,化成很多个小的子问题再进行填数
void solve(int a, int b, int x,int len)表示对左上角为(a,b)层数为x,矩形边长为len的矩形填数
ps:
对于这个题目而言,区别就是填矩阵不同,与输出不同,它只会填满的是以一个点变成三个点和一个星星的矩阵,并不会填以一个星星变成四个星星的矩阵,所以我们要初始化所有的点都为星星,这样弥补了之前的不足,但是也正是因为这个原因,我们不能像非递归代码那样,用字符串输出,只能一个一个字符输出,因为我们把整个ans数组初始化了!!
#include <bits/stdc++.h>
using namespace std;
char ans[1005][1005], w[10][10];
int n, k;
void solve(int a, int b, int x, int len)
{len /= n;if (x == 1){ //如果已经到最后一层,填数,returnfor (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)ans[i + a - 1][j + b - 1] = w[i][j];return;}for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j)if (w[i][j] == '.'){ //如果是.递归填数int aa = a + (i - 1) * len, bb = b + (j - 1) * len;solve(aa, bb, x - 1, len);}
}
int main()
{while (~scanf("%d %d", &n, &k)){int len = pow(n, k);memset(ans, '*', sizeof(ans)); //默认全部填上*for (int i = 1; i <= n; ++i)scanf("%s", w[i] + 1); //从数组元素下标为1开始填数solve(1, 1, k, len);for (int i = 1; i <= len; ++i){for (int j = 1; j <= len; ++j)printf("%c", ans[i][j]);putchar('\n');}}return 0;
}
解密
题目描述
湖南中医药大学有含浦、东塘 2 个校区,学校办学历史悠久,前身为 1934 年的湖南国医专科学校,1953
年创办湖南中医进修学校,1960 年创建普通高等本科院校——湖南中医学院,1979 年成为全国首批取得
中医类研究生学历教育资格的院校,1990 年原湖南科技大学成建制并入湖南中医学院,2002 年与湖南省
中医药研究院合并,2006 年经教育部批准更名为湖南中医药大学,2012 年进入湖南省一本招生序列。
目前,学校与湖南省中医药研究院实行校院合一的管理体制。学校学科门类齐全、中医药特色鲜明。学校
设有 18 个学院、24 个本科专业,涵盖医、理、工、管、文等 5 大学科门类。中医诊断学在本学科研究领
域居国内领先水平。
小 F 居住在含浦校区,他想和东塘校区的同学小 L 聊天,为了保证沟通安全,他发明了一种加密方式,这
种加密方式是这样的:对于一个 01 串,小 F 会将其从左到右每 8 位分成一组,最后一组可能不足 8 位,
对每组进行逆序操作,即如果原来是 bLbL+1bL+2 · · · bR−1bR, 逆序之后变成 bRbR−1bR−2 · · · bL−1bL。现在
小 F 已经加密好了一个串,并且将其发给了小 L,你能帮助小 L 得到这串密文对应的原始信息吗?
输入
单组数据。
一行一个 01 串,代表加密后的字符串,串长度大于 0, 小于等于 100。
输出
一行字符串,代表加密后的字符串所对应的原始信。
样例输入
100010110011101
样例输出
110100011011100
ps:刚刚开始看的时候以为这是一个水题,其实它就是一个水题,但是当时连着wa了三发,这一下子让我冷静下来仔细思考,虽然思考后过了题目,但是事后看大佬的代码的时候我发现自己想的太复杂了,大佬简直了!此处膜拜~,下面附上我的和大佬的代码,为了表示尊敬,大佬最后出场,嘿嘿(坏笑)。
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 10;
int a[maxn];
char c[110];
int main()
{while (~scanf("%s", c)){int ls = strlen(c);int m = 0;while (m < ls){m += 8;if (m <= ls)for (int i = m - 1; i >= m - 8; --i)printf("%c", c[i]);else{for (int i = ls - 1; i >= ls - (ls % 8); --i)printf("%c", c[i]);}}printf("\n");}return 0;
}
这是大佬的代码
#include <bits/stdc++.h>
using namespace std;
int main()
{char c[1010];while (~scanf("%s", c)){int lc = strlen(c);for (int i = 0; i < lc; i += 8){for (int j = min(i + 7, lc - 1); j >= i; --j)printf("%c", c[j]);}printf("\n");}return 0;
}
emmmm,相比之下,我简直
时间能治愈一切,也能淡忘一切,所有的悲伤都会因为时间而淡忘~ |
---|
第三届全国中医药院校大学生程序设计竞赛(部分题解)更新中~相关推荐
- 第三届全国中医药院校大学生程序设计竞赛 (正式赛)
目录 Problem B. 绿地装饰(暴力模拟+思维) E 解密(水+有点巧妙的解法) F: 巍巍岳麓(类似最小生成树) H: 百舸争流(贪心) Problem B. 绿地装饰(暴力模拟+思维) 时间 ...
- 第三届全国中医药院校大学生程序设计竞赛题解
目录 A Welcome B 绿地装饰 C 击鼓传花 D 旅行(待补题) E 解密 F 巍巍岳麓(最小生成树) G Solution Sets(待补题) H 百舸争流(待补题) I 最长不下降子序列( ...
- 第二届全国中医药院校大学生程序设计竞赛
目录 A 篮球队选拔 B 黑暗意志 C 调酒壶里的酸奶 D 过分的谜题 E 不存在的泳池 F fps游戏 G 流连人间的苏苏 H 路哥从不低头 (还没有写) I 闪闪发光 J 小C的数学问题 K 周期 ...
- 2019河北省大学生程序设计竞赛(部分题解)
2019河北省大学生程序设计竞赛 B.Icebound and Sequence B题题解 G.点我 签到题 H.天神的密码 签到题 #include <iostream> #includ ...
- 2021中国大学生程序设计竞赛部分题解(CCPC)- 网络选拔赛(重赛)
文章目录 一.1002 Kanade Doesn't Want to Learn CG 二.1004 Primality Test 三.1005 Monopoly 四.1006 Nun Heh Heh ...
- 浙江中医药大学第十二届大学生程序设计竞赛 部分题解
Problem A. Jhadgre的C语言程序 helle 直接复制 Problem B. Wpremig的AH之战 博弈问题还没有学,待补 Problem C. Wpremig的三角形 没看这题, ...
- 第十五届吉林省大学生程序设计竞赛个人题解
A. Random Number Checker 奇数和偶数的数量之差小于1即为Good B. Arithmetic Exercise 计算保留k位小数的a/b的结果 模拟除法即可,注意进位的细节 v ...
- HBCPC2021-河北省大学生程序设计竞赛-部分题解
这里写目录标题 7-1 理财 7-2 B-棋盘 7-5 E-求导 7-8 H-信号传输 7-10 罚时算术 7-1 理财 签到题,用scanf和printf进行格式输出更简单 AC代码: #inclu ...
- 秦皇岛计算机编程大赛,关于举办第三届河北省大学生程序设计竞赛燕山大学选拔赛的通知...
为提高我校本科生程序设计能力.选拔优秀学生组队参加"第三届河北省大学生程序设计竞赛(HCPC2019)",学校决定组织"第三届河北省大学生程序设计竞赛选拔赛", ...
最新文章
- Python源码学习:内建类型简析并简析int对象
- 卡方 matlab,matlab卡方分布 卡方检验(Chi-square test)及其MATLAB实现 - 余姚娱乐网
- 【错误记录】无法打开 “xxx“ , 因为 Apple 无法检查其是否包含恶意软件
- 从程序猿到SAP产品经理,我是如何转型的?
- Java 面向对象:构造器详解
- Linux开机启动的步骤
- Otsu算法原理及实现
- go mysql stmt exec_Go语言操作MySQL
- PAIP.FLEX与JAVA数据对应关系.txt
- c语言计算器括号怎么解决,C语言计算器,该如何解决
- 飞机大战素材素材素材
- HTML制作简易个人简历(表单)
- mysql nutch,nutch结合mysql配置
- 微信小程序│ 游戏开发 │连连看游戏
- Android用户注册界面设计
- Spring Boot (十一): Spring Boot 定时任务
- Python自动化修改word实例
- 基于CEP的量化交易平台建设
- 电子签约存证及印章管理整体化解决方案
- php编辑器浅色还是深色,程序员的IDE到底是浅色主题好还是深色主题好?
热门文章
- 用C语言编写5个学生,每个学生有3门课程成绩,从键盘输入学生数据(学号,姓名,3门成绩)计算平均成绩,将成绩放入磁盘文件stud中
- 马云点了人类史上最贵“外卖”,又一场“三国杀”即将来临?
- 去哪儿12306候补购票怎么用?
- git官网下载不了或下载很慢的解决办法!
- Shor算法 or量子傅里叶变换?
- 服务器如何释放虚拟内存,服务器如何释放虚拟内存
- java远程连接fpt_java远程连接本地fpt
- 用illustrator、AI将边框线转换为填充形状
- 科学型IT人才和工程型IT人才
- php警告注释,php程序(warning)警告