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. ...
随机推荐
- empty()和size() == 0有区别吗
empty()和size() 这里说的empty()和size()都是STL的容器中提供的接口,分别用来判断当前容器是否为空和获取当前包含的元素个数 区别 其实按道理来说两者应该是相等的,而且STL容 ...
- 第一期chrome浏览器的小技巧------《提高搜索效率》
!!! 这次的技巧是:利用chrome提供的设置 提高你的搜索效率 !!! 我们经常遇到问题,搜索的时候很不方便 比如你在百度上搜索一个东西的时候正好没有搜到,那么你想找到这个东西的话,很明显要到其他 ...
- PowerShell 定时输出citrix desktop昨日连接会话
asnp citrix*$now_date = [datetime]::Today$day2 = [datetime]::Today - [TimeSpan]::FromHours(24)$fiel_ ...
- 没花一分钱的我竟然收到的JetBrains IDEA官方免费赠送一年的Licence
前言 做java的人,一般IDE工具用的不是eclipse就是IntelliJ IDEA了吧,eclipse因为是开源软件,而且起步比较早,功能也比较完善.早期基本上做java的使用eclipse都是 ...
- CocoaFoundation和CoreFoundation之间数据转换(桥接__bridge)
ARC仅管理Objective-C指针(retain.release.autorelease),不管理CoreFoundation指针,CF指针由人工管理,手动的CFRetain和CFRelease来 ...
- 《Head First 设计模式》:剩下的模式
正文 一.桥接模式 1.定义 桥接模式通过将实现和抽象分离开来,放在两个不同的类层次中,从而使得它们可以独立改变. 要点: 当一个类存在两个独立变化的维度,而且都需要进行扩展时,可以将其中一个维度抽象 ...
- 010_Java历史及特性
目录 Java历史 C语言 1972年 C++ 1982年 Java 1995年 Applet 图形界面的程序 J2SE Java 2 标准版 桌面 J2ME Java 2 移动版 手机 J2EE J ...
- Jenkins 凭证管理 - 看这一篇就够了~
目录 Credential 类型 Credential 安全 Credential 创建 Credential ID 定义 Credential 使用 Credential 相关插件 最佳实践 许多三 ...
- CF1336 Linova and Kingdom
题面 给定 n 个节点的有根树,根是 1 号节点. 你可以选择 k 个节点将其设置为工业城市,其余设置为旅游城市. 对于一个工业城市,定义它的幸福值为工业城市到根的路径经过的旅游城市的数量. 你需要求 ...
- 学习写简单的RPC框架demo
学习实现一个简单的RPC框架. 工程主要目录分级结构: rpc-common: 公共基础包,能力提供包 rpc-provider: 服务提供者 rpc-consumer:服务消费者 rpc-servi ...