CCF-201512-消除类游戏
| 试题编号: | 201512-2 |
| 试题名称: | 消除类游戏 |
| 时间限制: | 1.0s |
| 内存限制: | 256.0MB |
| 问题描述: |
问题描述
消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
现在给你一个n行m列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。 请注意:一个棋子可能在某一行和某一列同时被消除。 输入格式
输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。颜色使用1至9编号。 输出格式
输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
样例输入
4 5
2 2 3 1 2 3 4 5 1 4 2 3 2 1 3 2 2 2 4 4 样例输出
2 2 3 0 2
3 4 5 0 4 2 3 2 0 3 0 0 0 4 4 样例说明
棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
样例输入
4 5
2 2 3 1 2 3 1 1 1 1 2 3 2 1 3 2 2 3 3 3 样例输出
2 2 3 0 2
3 0 0 0 0 2 3 2 0 3 2 2 0 0 0 样例说明
棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
评测用例规模与约定
所有的评测用例满足:1 ≤ n, m ≤ 30。
|
分析:未完待续。。。。
1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 #include <cstring>
5 #include <vector>
6 using namespace std;
7 const int maxn = 30;
8 struct Point{
9 int x;
10 int y;
11 int sign; //方向
12 int count; //个数
13 Point(int x = 0,int y = 0,int sign = 0,int count = 0){
14 this->x = x;
15 this->y = y;
16 this->sign = sign;
17 this->count = count;
18 }
19 };
20 int graph[maxn][maxn];
21 int have_find[maxn][maxn]; //-1为未标记,1为已标记
22 int m,n,count;
23 vector<Point*> point; //存放需要消除的点
24 void finded(Point* p){ //标记已经确定消除的点
25 int x = p->x;
26 if(p->sign == 1){
27 for(int i = p->y;i < p->y+p->count;i++){
28 have_find[p->x][i] = 1;
29 }
30 }else if(p->sign == 2){
31 for(int i = p->x;i < p->x+p->count;i++){
32 have_find[i][p->y] = 1;
33 }
34 }
35 }
36 void judge(int x,int y,int s){ //判断以点(x,y)为首的行(列)是否符合消除条件
37 int count = 0; //根据s的值来判断是行遍历还是列遍历
38 int temp = graph[x][y]; //s == 1为行遍历,s == 2为列遍历
39 if(s == 1){ //行遍历
40 for(int i = y;i < m;i++){
41 if(graph[x][i] == temp){
42 count++;
43 }else{
44 break;
45 }
46 }
47 }else if(s == 2){ //列遍历
48 for(int i = x;i < n;i++){
49 if(graph[i][y] == temp){
50 count++;
51 }else{
52 break;
53 }
54 }
55 }
56 if(count >= 3){
57 Point* p = new Point(x,y,s,count);
58 finded(p); //标记已经确定消除的点
59 point.push_back(p);
60 }
61 }
62
63 void make_work(){ //消除掉所有标记的点
64 for(int i = 0;i < point.size();i++){
65 Point* p = point[i];
66 if(p->sign == 1){
67 for(int i = p->y;i < p->y + p->count;i++){
68 graph[p->x][i] = 0;
69 }
70 }else if(p->sign == 2){
71 for(int i = p->x;i < p->x + p->count;i++){
72 graph[i][p->y] = 0;
73 }
74 }
75 }
76 }
77 int main(){
78 cin >> n >> m;
79 for(int i = 0;i < n;i++){
80 for(int j = 0;j < m;j++){
81 cin >> graph[i][j];
82 }
83 }
84 memset(have_find,-1,sizeof(have_find));
85
86 for(int i = 0;i < n;i++){ //进行行标记
87 for(int j = 0;j < m;j++){
88 if(have_find[i][j] == -1){
89 judge(i,j,1);
90 }
91 }
92 }
93 memset(have_find,-1,sizeof(have_find));
94 for(int i = 0;i < n;i++){ //进行列标记
95 for(int j = 0;j < m;j++){
96 if(have_find[i][j] == -1){
97 judge(i,j,2);
98 }
99 }
100 }
101 make_work(); //进行清除
102 for(int i = 0;i < n;i++){
103 for(int j = 0;j < m;j++){
104 cout << graph[i][j] << " ";
105 }
106 cout << "\n";
107 }
108 return 0;
109 }
| 201512-2 |
CCF-201512-消除类游戏的更多相关文章
- CCF CSP 201512-2 消除类游戏
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...
- ccf题库中2015年12月2号消除类游戏
题目如下: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这 ...
- ccf消除类游戏
问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...
- CSP201512-2:消除类游戏
引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...
- 消除类游戏(js版)
最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...
- CCF2015122消除类游戏(C语言版)
问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面
游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现
Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单
系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...
- 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述
在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...
随机推荐
- 使用python编写正逆序乘法表
# 99乘法表 # 顺序 for i in range(1,10): n = 1 while n <= i: print('{}x{}={}'.format(n,i,n*i),end=' ') ...
- Consul 学习笔记—服务发现
前言: 上一篇文章简单实用Consul试下服务注册,本篇继续学习Consul中的另外特性:服务发现.KV操作 :以及对上篇文章中存在的问题进行解决 问题解决 在上一篇文章中,注册服务提示检查失败. 通 ...
- js 判断客户端 和 asp.net/C#判断客户端类型
1.js 判断客户端 <script language="JavaScript"> <!-- onload = function browserRedirect( ...
- Helium文档2-WebUI自动化-常用方法介绍
学习思路: 查看github项目的源码,每个方法都有介绍及使用说明 https://github.com/mherrmann/selenium-python-helium/blob/master/he ...
- Learning Attention-based Embeddings for Relation Prediction in Knowledge Graphs
这篇论文试图将GAT应用于KG任务中,但是问题是知识图谱中实体与实体之间关系并不相同,因此结构信息不再是简单的节点与节点之间的相邻关系.这里进行了一些小的trick进行改进,即在将实体特征拼接在一起的 ...
- 通过IIS部署,将图片或者视频等文件用http协议网址访问
打开IIS管理器 又键点击添加网站 然后到这个界面 文件夹里有这些图片,随便用的一些图片 然后我这里用的是局域网测试,所以IP就是wifi的IP地址,如果是服务器的话,直接选服务器本身的IP地址就行了 ...
- vscode按下F5黑窗口显示的是乱码
找了很多方法,powershell修改了也变不了 最后找到了这个链接的方法:https://blog.csdn.net/weixin_40040107/article/details/10372155 ...
- PS模式编辑
5.1PS灰度模式 (1)灰度模式:最多包含256种灰度的8位图像. (2)模式含义:不同模式对颜色的分类甚至种类都不一样,可以理解为格式不一样. (3)灰度模式:可以在去RGB格式下去色处理达到利斯 ...
- 安装npm全局包提示没有写入权限: npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
方法一 安装npm全局包提示没有写入权限: npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules ...
- c++ 让你的应用支持相对路径
std::string GetCurrentExeDir(){ char szPath[1024] = { 0 };#ifdef WIN32 GetModuleFileName(NULL, szPat ...