题目描述

小码哥最近对小游戏很感兴趣,于是他仿照着合成大西瓜小游戏做了一个简化版程序。
在这个程序中游戏的区域变为了一维(即一条直线)。游戏内有n次投放格子的机会,每次机会程序会给出一个有着随机数R的新格子供小码哥投放。
一开始游戏内是空的(无格子),当游戏内无格子的时候,小码哥只能把新格子投放到第一个位置(最左边)﹔当游戏内有格子时,小码哥只能将新格子投放到某个已存在的格子上(称为被碰撞格子),并且如果被碰撞格子里的数字与新格子的数字相同,那么被碰撞格子里的数字会与新格子的数字合并,被碰撞的格子的数字也变成原来的2倍,这被称为一次合并,如果被碰撞格子里的数字与新格子的数字不同,那么新格子会插入到被碰撞格子的右侧。
除了上面的方式能触发合并以外,程序在每次投放后还会从左往右进行一次结算,如果相邻的两个格子的数字相同,那么这两个格子会合并成一个并且合并得到的格子的数字为原本两个格子的数字之和,并且右边的所有格子会向左移动来补齐空位(如果连续n个相同(n>2)先结算前两个),然后重新从左到右结算,这是合并的另—种触发方式
每当合并触发后,如果生成的格子内的数大于2048,那么这个格子会立即消失(消失优先度最高),空位由右边的所有格子向左移动来补齐,这被称为一次完美的合并。

小码哥还设计了一个得分系统:

  • 1.每当他投放一个新数字或者触发一次合并,则得到等于新数字的得分或者等于合并生成的新数的得分,两者分开计算,即投入新数字时得到得分(无论是否触发合并),投入后并触发合并再追加获得合并的得分(另外,虽然完美的合并后格子会立即消失,但得分会计入)
  • ⒉.程序会记录达成完美的合并的次数,初始次数为0,每当完成一次完美的合并次数+1
    由于小码哥做这个程序时得分的显示区域有限,因此小码哥的得分系统里的得分显示的是总得分对10007取模得到的数字

现在给出投放机会的次数n,以及每次投放的数字R和小码哥投放的位置l,请你求出投放次数用完后游戏界面的情况(即格子的情况)以及小码哥最后的得分对10007取模得到的结果和小码哥达成完美的合并的次数。

输入格式

第一行一个正整数n,表示小码哥的投放次数
接下来n行每行两个数字R,l,表示新格子的数字和小码哥投放的位置

输出格式

第一行若干个正整数,表示最后游戏界面的情况,如果无输出也要换行
第二行两个整数,表示小码哥的得分对10007取模的结果和完成完美的合并的次数

输入样例

5
8 1
8 1
4 1
2 1
8 3

输出样例

16 2 4 8
46 0

分析

合成大西瓜的关键就在于如何在特定位置插入一个数字和删除一个数字。
需要用到vectorvectorvector容器的insert(vector.begin()+pos,num)insert(vector.begin()+pos,num)insert(vector.begin()+pos,num)函数和erase(vector.begin()+pos)erase(vector.begin()+pos)erase(vector.begin()+pos)函数。

C++ 代码

#include<bits/stdc++.h>
using namespace std;
//计算分值
int cal(int n1,int n2)
{return (n1+n2)%10007;
}
int n;
int main()
{int score=0,perfect=0;vector<int> a;cin>>n;for(int i=0;i<n;i++){int num,idx;cin>>num>>idx;score=cal(score,num);idx-=1;//一开始数组为空,直接插入一个元素if(a.size()==0)a.push_back(num);else{//如果插入的位置上的数和该数字相同,则合并if(a[idx]==num){a[idx]*=2;score=cal(score,a[idx]);//如果大于2048,则为一次完美合并if(a[idx]>2048){perfect+=1;//如果此时数组大小为1,删除该元素后数组为空if(a.size()==1)a.clear();else{//将该位置从vector中删除a.erase(a.begin()+idx);  }}}else //a[idx]上有元素,且与插入的元素不等,就在右边插入a.insert(a.begin()+idx+1,num);}if(a.size()>1) //如果数组大小大于1,进行从左到右的删除操作{while(1){int ff=0;for(int j=0;j<a.size()-1;j++){//找到相邻两个相同的元素,就合并if(a[j]==a[j+1]){a[j]*=2;score=cal(score,a[j]);ff=1;//2个元素合并,删除一个元素a.erase(a.begin()+j+1);//完美操作if(a[j]>2048){perfect+=1;if(a.size()==1) a.clear();else a.erase(a.begin()+j); //该元素大于2048自动消除                        }break;                    }}//没有相邻相同的元素,直接跳出if(ff==0)break; }            }}//输出结果for(auto item: a)    cout<<item<<" ";puts("");cout<<score%10007<<" "<<perfect;return 0;
}

百度松果 合成大数字 (vector模拟)相关推荐

  1. 人生重开模拟/合成大西瓜/小空调......2021爆款开源项目盘点

    转眼间,2021年已过大半,你还记得今年在开发者朋友圈里爆红的开源项目吗? 本文就来简要盘点2021涌现出的"宝藏"级开源项目,看看这一届的开发者们,又有哪些新脑洞! 彩蛋:大部分 ...

  2. 魔性“合成大西瓜”背后,我用 350 行代码解开了碰撞之谜!

    [CSDN 编者按]高中物理最烦的几个题:碰撞.守恒.弹性.摩擦--今天全赶一块了.以合成大西瓜为代表的小球碰撞类游戏好玩是好玩,就是有点费程序员.本文,我们将利用简单的 JavaScript 物理引 ...

  3. 张一鸣“合成大西瓜”

    来源|字母榜 编辑|谭宵寒.张茹雅 快手市值破万亿,老对手字节跳动恐最赢--因为两家公司互为对标,快手市值狂涨,字节估值肯定跟着水涨船高. 在很多人心目中,字节上市后的市值应该是快手的好几倍,因为字节 ...

  4. 魔改合成大西瓜,从源码到部署,步骤详细

    现在有一款火爆全网的小游戏<合成大西瓜>,据官方数据显示,目前参与合成西瓜的游玩人次已经多达六千多万,可见广大网友已经不仅仅满足于在娱乐圈吃瓜了,现在更喜欢自己创造大西瓜,哈哈哈. 前一段 ...

  5. Leetcode402 remove-k-digits贪心+vector模拟栈的思想

    题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: ...

  6. 魔改和上线你的合成大西瓜,最全教程!

    本文是从 0 到 1 的教程,让小白也能够魔改和上线发布属于你的合成大西瓜! 最近,一款名为『 合成大西瓜 』的游戏突然火了!看来真的是大家吃瓜吃太多了,这个小游戏深抓人心! 当然,游戏本身非常有趣, ...

  7. 合成大西瓜自定义图片及部署

    合成大西瓜自定义图片(改图片)及发布访问(无需编程基础) 首先关于服务器扣费问题,需要勾选免费用量弹窗(注意销毁服务器一个天最多两次,一个月四次) 首先新建: 然后选择空或者nodejs,然后下一步 ...

  8. 我用Python合成大西瓜!

    来源:Datawhale本文约2400字,建议阅读5分钟你已经是个成熟的西瓜了,要学会自己合成. 这周五没漂亮妹妹带我出去玩了呜呜,无聊在家扣手机,发现大家都在合成大西瓜 .作为一个未来年轻无为的计算 ...

  9. 牛逼啦!20行Python代码让程序自动玩“合成大西瓜”!

    最近的时间里,想必大家都被"合成大西瓜"这个游戏刷屏,无论是微博,还是B站,乃至是微信公众号,都有很多博主和up主们推荐. 老规矩,需要打包好的软件关注小编,QQ群:7211953 ...

最新文章

  1. 不同虚拟机局域网Vlan之间访问
  2. 往Cloud Foundry上部署应用背后的技术实现
  3. Windows on Device 项目实践 4 - 智能风扇制作
  4. java和python对比----1:
  5. 搞到一个IDEA插件,H哥30秒生成一个Spring Cloud Alibaba工程
  6. 【Lintcode】076.Longest Increasing Subsequence
  7. 常用的公共数据集(二)
  8. 360路由器v2刷第三方固件_路由器刷固件图文教程,刷机OpenWrt第三方固件,路由器升级固件...
  9. 利用google地图获取位置经纬度坐标
  10. 浏览器主页被劫持篡改为hao123或者别的网页解决方法
  11. 使用turtle库,绘制一个正方形。
  12. 靶机5 DC-4(过程超详细)
  13. 使用IBM Data Studio 管理DB2
  14. Flutter 自定义动画 — 数字递增动画和文字逐行逐字出现或消失动画
  15. C语言实现PTA题目--跳一跳
  16. 设计模型概念了解-------------【设计模型】
  17. C++ fstream 创建文件
  18. BUGKU misc--细心的大象--writeup
  19. echarts中配置图例形状、图标宽高、图标和文字间距、图例位置、文字颜色、字体大小等基础配置
  20. 刚工作不知道B端、C端什么意思?

热门文章

  1. wundos无法对计算机进行启动,fanhuiwundos电脑提醒不是正版想
  2. oracle如何改数据库地址,oracle 更改数据库位置
  3. 隧道环境在线监控系统解决方案
  4. 别等到使用电化学工作站时才来了解这些
  5. soybean单页应用的问题
  6. 旋转木马是最残忍的游戏, 彼此追逐却有永恒的距离
  7. 聊一聊几种常用web图片格式:gif、jpg、png、webp?大厂必问
  8. JS代码实现击鼓传花【队列】
  9. Python处理今日头条保存的无法打开图片,今日头条web图片转换为JPG图片
  10. 极客日报:​​​字节员工操纵抖音热榜被判刑;微信群聊可直接访问电商外链;JetBrains发布新一代编辑器Fleet