清华OJ 祖玛游戏 模拟 解题报告
2017-07-07 15:28
344 查看
【问题描述】
祖玛是一款曾经风靡全球的游戏,其玩法是:在一条轨道上初始排列着若干个彩色珠子,其中任意三个相邻的珠子不会完全同色。此后,你可以发射珠子到轨道上并加入原有序列中。一旦有三个或更多同色的珠子变成相邻,它们就会立即消失。这类消除现象可能会连锁式发生,其间你将暂时不能发射珠子。开发商最近准备为玩家写一个游戏过程的回放工具。他们已经在游戏内完成了过程记录的功能,而回放功能的实现则委托你来完成。
游戏过程的记录中,首先是轨道上初始的珠子序列,然后是玩家接下来所做的一系列操作。你的任务是,在各次操作之后及时计算出新的珠子序列。
【输入格式】
第一行是一个由大写字母’A’~’Z’组成的字符串,表示轨道上初始的珠子序列,不同的字母表示不同的颜色。第二行是一个数字 ,表示整个回放过程共有 次操作。
接下来的 行依次对应于各次操作。每次操作由一个数字 和一个大写字母 描述,以空格分隔。其中, 为新珠子的颜色。若插入前共有 颗珠子,则 表示新珠子嵌入之后(尚未发生消除之前)在轨道上的位序。
【输出格式】
输出共 行,依次给出各次操作(及可能随即发生的消除现象)之后轨道上NOIP 模拟题 hao
第 3 页 共 6 页
的珠子序列。
如果轨道上已没有珠子,则以“-”表示。
【样例输入】
ACCBA5
1 B
0 A
2 B
4 C
0 A
【样例输出】
ABCCBAAABCCBA
AABBCCBA
-
A
【样例解释】
╭︿ ︿ ︿╮{/ o o /}
( ( o o ) )
︶ ︶ ︶
思路
模拟,注意坑点:1、有空串。
2、合并时特判。
插入小技巧与具体注意事项见代码备注。
代码
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<cmath> #include<vector> using namespace std; const int N=2000+5; int n,x; char y,a ,tmp ; int check(int t) { int step=0,pos=t; while (pos<=strlen(a)&&a[pos++]==a[t]) step++;//有没有可以消除的 pos=t-1; while (pos>=0&&a[pos--]==a[t]) step++;//是不是因为碰撞 if (step>=3) return 1;//有要消除的 return 0; } int change(int t) { int end=t,star=t; while (a[star]==a[t]) star--; star++; while (a[end]==a[t]) end++; strcpy(a+star,a+end); if (a[star]==a[star-1]) { if (star==0) return 1; return star; } else if (a[star]==a[star+1]) return star; return 0; } int main() { freopen("hao.in","r",stdin); // freopen("hao.out","w",stdout); gets(a);//防止空串 scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d %c",&x,&y); strcpy(tmp,a+x); a[x]=y; strcpy(a+x+1,tmp);//精妙的插入 while (check(x)==1) x=change(x); if (a[0]=='\0') printf("-\n");//没有了 else printf("%s\n",a); } return 0; }
相关文章推荐
- jzoj 1568. 【普及模拟】石子游戏 解题报告
- jzoj 1591. 【普及模拟】游戏 解题报告
- JZOJ.3400【GDOI2014模拟】旅行 解题报告
- codevs 1182 小球 模拟? 解题报告
- 【矩阵取数游戏】解题报告
- CCF 201609-3 炉石传说 解题报告 模拟
- codevs 1098 均分纸牌 模拟 解题报告
- 【九度OJ】题目1183:守形数 解题报告
- 【九度OJ】题目1118:数制转换 解题报告
- 【九度OJ】题目1138:进制转换 解题报告
- 【九度OJ】题目1438:最小公倍数 解题报告
- codevs 1966 乘法游戏 区间DP 解题报告
- 【九度OJ】题目1198:a+b 解题报告
- 10.24南海NOIP模拟测解题报告
- hdu 1527取石子游戏(威佐夫博奕)(解题报告)
- Leetcode #55. Jump Game 跳跃游戏 解题报告
- 【九度OJ】题目1073:杨辉三角形 解题报告
- GFOJ problem 470: [HbFS-]Red is good 解题报告
- 哈理工oj-1049Jigsaw Puzzle解题报告
- 九度OJ题目1156:谁是你的潜在朋友解题报告