问题描述
试题编号: 201512-2
试题名称: 消除类游戏
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
  消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有nm列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以被消除时,这些地方的棋子将同时被消除。
  现在给你一个nm列的棋盘,棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
  请注意:一个棋子可能在某一行和某一列同时被消除。
输入格式
  输入的第一行包含两个整数nm,用空格分隔,分别表示棋盘的行数和列数。
  接下来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 ≤ nm ≤ 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-消除类游戏的更多相关文章

  1. CCF CSP 201512-2 消除类游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...

  2. ccf题库中2015年12月2号消除类游戏

    题目如下: 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这 ...

  3. ccf消除类游戏

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  4. CSP201512-2:消除类游戏

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的"计算机职业资格认证"考试, ...

  5. 消除类游戏(js版)

    最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...

  6. CCF2015122消除类游戏(C语言版)

    问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消 ...

  7. 用cocos2d-html5做的消除类游戏《英雄爱消除》(3)——游戏主界面

    游戏主界面,同时也是主程序,包括sprite的生成加入以及游戏状态的控制. 下面同样贴下源码再讲解; /** * Power by html5中文网(html5china.com) * author: ...

  8. 用cocos2d-html5做的消除类游戏《英雄爱消除》(2)——Block设计实现

    Block可以说是这个游戏的核心类,它除了包含自身的一些属性和方法外还添加了对触摸事件的响应. 我们先来看下源码吧 /** * Power by html5中文网(html5china.com) * ...

  9. 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

    系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...

  10. 用cocos2d-html5做的消除类游戏《英雄爱消除》——概述

    在bbs.html5china.com论坛学习了MV和老马的小熊蘑菇后我也自己模仿他们做了这样子一个游戏,权当技术交流学习,现在附上游戏截图和源码. 游戏截图: 1.系统菜单界面: 2.游戏界面 3. ...

随机推荐

  1. python接口测试之读取配置文件

    1.python使用自带的configparser模块用来读取配置文件,配置文件可以为.conf或.ini结尾 在使用前需要先安装该模块,使用pip安装即可 2.新建一个名为a.conf的配置文件 a ...

  2. 【状态压缩DP】SCOI2009 围豆豆

    题目大意 洛谷链接 在一个\(N×M\)的矩阵方格内分布着\(D\)颗豆子,每颗豆有不同的分值\(V_i\).游戏者可以选择任意一个方格作为起始格,每次移动可以随意的走到相邻的四个格子,直到最终又回到 ...

  3. rpm|yum安装的查看安装路径

    [root@localhost src]# rpm -qa|grep grafanagrafana-7.1.0-1.x86_64[root@localhost src]# rpm -ql grafan ...

  4. spring boot:使用caffeine+redis做二级缓存(spring boot 2.3.1)

    一,为什么要使用二级缓存? 我们通常会使用caffeine做本地缓存(或者叫做进程内缓存), 它的优点是速度快,操作方便,缺点是不方便管理,不方便扩展 而通常会使用redis作为分布式缓存, 它的优点 ...

  5. monolog记录日志

    <?php require_once 'vendor/autoload.php'; use Monolog\Formatter\LineFormatter; use Monolog\Logger ...

  6. selenium-绕过登录

    第一种方式:chrome-debug 1.现在终端输入一下命令,启动Chrome-debug模式 #windows a.首先将chrome的环境添加到PATH中 b.进入cmd 命令栏,输入:chro ...

  7. python GDAL 读写shp文件

    gdal包用于处理栅格数据,ogr用于处理矢量数据. 1 #!C:\Program Files\pythonxy\python\python.exe 2 #-*- coding:gb2312 -*- ...

  8. SQL 使用openquery进行跨库操作

    摘自:http://www.cnblogs.com/aji88/archive/2009/11/06/1597263.html 对给定的链接服务器执行指定的传递查询.该服务器是 OLE DB 数据源. ...

  9. OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体

    前言   级联分类器的效果并不是很好,准确度相对深度学习较低,本章使用opencv通过tensorflow深度学习,检测已有模型的分类.   Demo       可以猜测,1其实是人,18序号类是狗 ...

  10. 万字长文深入理解java中的集合-附PDF下载

    目录 1. 前言 2. List 2.1 fail-safe fail-fast知多少 2.1.1 Fail-fast Iterator 2.1.2 Fail-fast 的原理 2.1.3 Fail- ...