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

相关文章

使用Redis实现会话管理的示例代码

《使用Redis实现会话管理的示例代码》文章介绍了如何使用Redis实现会话管理,包括会话的创建、读取、更新和删除操作,通过设置会话超时时间并重置,可以确保会话在用户持续活动期间不会过期,此外,展示了... 目录1. 会话管理的基本概念2. 使用Redis实现会话管理2.1 引入依赖2.2 会话管理基本操作

mybatis-plus分表实现案例(附示例代码)

《mybatis-plus分表实现案例(附示例代码)》MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生,:本文主要介绍my... 目录文档说明数据库水平分表思路1. 为什么要水平分表2. 核心设计要点3.基于数据库水平分表注意事项示例

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param