CCF 俄罗斯方块 满分代码(有注释) + 解题思路(很简单直白的做法) + 技巧总结 201604 - 2

本文主要是介绍CCF 俄罗斯方块 满分代码(有注释) + 解题思路(很简单直白的做法) + 技巧总结 201604 - 2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

技巧总结

  • 对于需要先判断可不可以再进行“填充”数组的操作,可以利用memcpy,在一个新的数组上“试错”
  • 小数组在大数组中实现遍历,可以利用小数组的行列遍历,然后加上大数组的偏移量就可以遍历大数组

题目描述

在这里插入图片描述


解题思路

  • 该题数据范围不大,只有两百年,可以采用暴力枚举来解题
  • 从上而下枚举每一行,以(r, c)这个点作为小方块在大方块中的左上角位置,遍历小方块,看小方块会不会与大方块相重叠,第一次出现重叠的位置,就是刚好阻塞的地方,其上一行的状态就是答案,可以将上一行小方块在大方块中是1的位置记录在大方块中,输出大方块即是答案。
  • 还有一个问题就是,可能会出现大方块最后一行没有没有1,或者小方块的下面几行也没有1,为了防止复杂的特判,只需要在大方块下面的第16行,17行,18行,19行全填充上1,就不需要额外判断板块在小方块中的位置情况,模拟自然下落即可。

代码实现

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
#include <map>using namespace std;int g[20][10];
int p[4][4];int main()
{memset(g, 1, sizeof(g)); //会使16行及以下是1,避免特判边界的问题,板块碰界可以统一处理//输入大方块for (int i = 1; i <= 15; i ++){for (int j = 1; j <= 10; j ++){cin >> g[i][j];}}//输入小方块for (int i = 0; i < 4; i ++){for (int j = 0; j < 4; j ++){cin >> p[i][j];}}//输入开始的列数int c;cin >> c;for (int r = 1; ; r ++) //一定会碰壁,停止循环,所以不同设结束条件,从第1行开始,每次从(r,c)开始遍历小方块,模拟小方格下落的过程{bool st = false;for (int i = 0; i < 4; i ++){for (int j = 0; j < 4; j ++){if (p[i][j] && g[r + i][c + j]) //两者有重叠{st = true;break;}}if (st) break;}if (st) //如果出现了重叠,则说明答案应该是上一行的状态{r --; //返回上一行for (int i = 0; i < 4; i ++){for (int j = 0; j < 4; j ++){if (p[i][j]) g[r + i][c + j] = p[i][j]; //将小方块是1的地方填充在大方块中}}break;}}//输出最后的答案for (int i = 1; i <= 15; i ++){for (int j = 1; j <= 10; j ++){cout << g[i][j] << " ";}cout << endl;}return 0;
}

这篇关于CCF 俄罗斯方块 满分代码(有注释) + 解题思路(很简单直白的做法) + 技巧总结 201604 - 2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349952

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.