米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵-简单 Posted 2023-03-30 新时代原始人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵-简单相关的知识,希望对你有一定的参考价值。
米哈游的RBG矩阵
Problem Description
米小游拿到了一个矩阵,矩阵上有一格有一个颜色,为红色( R )。绿色( G )和蓝色( B )这三种颜色的一种。 然而米小游是蓝绿色盲,她无法分游蓝色和绿色,所以在米小游眼里看来,这个矩阵只有两种颜色,因为蓝色和绿色在她眼里是一种颜色。 米小游会把相同颜色的部分看成是一个连通块。请注意,这里的连通划是上下左右四连通的。 由于色盲的原因,米小游自己看到的连通块数量可能比真实的连通块数量少。 你可以帮米小游计算连通块少了多少吗?
input
第一行输入两个正整数 n 和 m,代表矩阵的行数和列数。接下来的 n 行,每行输入一个长度为m 的,仅包含 R 、G 、B 三种颜色的字符串,代表米小游拿到的矩阵。 1≤n,m≤1000
ouput
一个整数,代表米小游视角里比真实情况少的连通块数量。
Sample Input
2 6 RRGGBB RGBGRR
Sample Output
3
题目类型、难度、来源
总体思路:
此题就是求一个图的联通分量数量 。可以用并查集也可以用DFS、BFS。方法很多,数据集也不打,我这里为了写代码方便,就用了DFS。
AC代码
# include <ios tream>
using namespace std;
int n, m;
bool same_color ( char & c1, char & c2, bool flag)
if ( c1 == c2)
return true ;
else if ( flag)
return ( c1 + c2 == 'B' + 'G' ) ;
return false ;
void DFS ( char * * G, bool * * visted, bool & flag, int i, int j)
visted[ i] [ j] = 1 ;
if ( i+ 1 < n)
if ( same_color ( G[ i+ 1 ] [ j] , G[ i] [ j] , flag) && ! visted[ i+ 1 ] [ j] )
DFS ( G, visted, flag, i+ 1 , j) ;
if ( j+ 1 < m)
if ( same_color ( G[ i] [ j+ 1 ] , G[ i] [ j] , flag) && ! visted[ i] [ j+ 1 ] )
DFS ( G, visted, flag, i, j+ 1 ) ;
if ( i- 1 >= 0 )
if ( same_color ( G[ i- 1 ] [ j] , G[ i] [ j] , flag) && ! visted[ i- 1 ] [ j] )
DFS ( G, visted, flag, i- 1 , j) ;
if ( j- 1 >= 0 )
if ( same_color ( G[ i] [ j- 1 ] , G[ i] [ j] , flag) && ! visted[ i] [ j- 1 ] )
DFS ( G, visted, flag, i, j- 1 ) ;
int get_num ( char * * G, bool flag, int n, int m)
bool * * visted = new bool * [ n] ;
for ( int i = 0 ; i < n; i++ )
visted[ i] = new bool [ m] ;
for ( int i = 0 ; i < n; i++ )
for ( int j = 0 ; j < m; j++ )
visted[ i] [ j] = false ;
int cnt = 0 ;
for ( int i = 0 ; i < n; i++ )
for ( int j = 0 ; j < m; j++ )
if ( visted[ i] [ j] ) continue ;
DFS ( G, visted, flag, i, j) ;
cnt++ ;
return cnt;
int main ( )
cin >> n >> m;
char * * G = new char * [ n] ;
for ( int i = 0 ; i < n; i++ )
G[ i] = new char [ m] ;
for ( int j = 0 ; j < m; j++ )
cin >> G[ i] [ j] ;
int cnt1 = get_num ( G, 0 , n, m) ;
int cnt2 = get_num ( G, 1 , n, m) ;
cout << cnt1- cnt2;
return 0 ;
围观|第一代云原生企业米哈游如何让想象发生?
在米哈游的办公区,有一间会议室,专门留给了阿里云工程师。
今年,是这家二次元文化公司创立的第九年,米哈游和阿里云的交情,也有八年了。
米哈游总裁刘伟还记得多年前,王坚博士带着八位公司高管和负责团队抵达米哈游办公室时的情景。那天,在米哈游租用的小小的办公区中,只有 30 多个工位,甚至没有一间会议室能同时容纳这十来名访客。
那时,米哈游创立不久,阿里云也还在对外服务的起步阶段,两个初出茅庐的小兄弟机缘巧合走到了一起,彼此摸索着前行。
那一天,王坚博士讲了这样一段话:“如果客户坐着飞机在天上飞,我们只在地上看,是很容易出故障的。要做,我们就和客户一起在天上飞。”
临走时,王坚博士将自己的手机号写给了刘伟。他说,有任何问题,直接打电话给我。
许多年过去了,所幸,这样的一通电话从未拨出去。而阿里巴巴核心系统也早已实现 100% 上云,验证了那句“和客户坐在同一架飞机上”。
时间一晃而过。2020 年 9 月,在米哈游与阿里云并行的第八年,这家二次元文化公司上线了最新的代表作《原神》,全球五大区服完全承载在阿里云上。
在这一年年底,《原神》像游戏行业的一匹黑马,热度节节上升。
11 月 30 日,谷歌将 Google Play 2020 年度最佳游戏颁发给了《原神》;仅一天后,苹果又将 App Store 2020 iPhone 年度游戏交给了《原神》。
在这一年,阿里云也早已从当年的小兄弟成长为云计算行业的领军者,成为许多行业的数字化底座,也为许多中国游戏企业提供服务。
回到 2012 年,米哈游刚刚做出二次元游戏《崩坏学园》。
那一年,手游市场还处于起步阶段,动漫游戏更是开发者寥寥,环顾 App Store,没有几个成型的手机动漫游戏。但在米哈游心里,未来的游戏市场,一定有国产动漫的一席之地。
巧合的是,云计算的行业阶段和动漫游戏有些类似。作为一个新生技术,中国的云计算行业起步不久,但米哈游和阿里云都有着一个关于未来的梦想。
传统IT时代,游戏公司的做法是自己购买服务器、自建机房、配置运维人员。这样斥巨资才能启动的重模式,将许多有想法的创业者挡在了游戏行业的门外,在那个时期,研发游戏几乎只能是大公司的专利。
云计算带来了一个新机会——跳过一切前期的 IT 设施投入,直接在网页上点点鼠标,就能调用云算力。这几乎是为米哈游这样的创业团队量身定制的完美产品。
“崩 1”上线时,使用了阿里云的两台云服务器,小小的尝试,开启了米哈游的“云上之旅”。
回顾起来,米哈游可以说是一代互联网创业企业的代表。诞生在云端,所有业务都在云上,率先感受着云计算高弹性、高并发、低成本等种种特色,堪称“云原生企业”。
也正是这一代“云原生企业”的快速成长,推动着中国云计算的发展与普及。
2016 年,米哈游上线了第三款游戏:《崩坏 3》。但在此时,米哈游仍只有两名运维人员——在传统自建服务器机房的时代,这几乎是不可想象的。
“问题是很难避免的,关键是能不能解决问题。”米哈游的技术负责人刘霄回忆说。
一年年过去,米哈游也渐渐成长起来,从三个人到几十人,再到几百、上千人,不再是那个没有会议室的小团队。
米哈游也为阿里云工程师们专门留了一间会议室,对他们说,“随时来、随时用”。
起初,米哈游规模尚小,在拓展海外市场的过程中也遇到了一些波折。
“所幸当初规模小,用户不算多,这件事的负面影响还能控制。如果是在“崩 3”、《原神》这样规模的游戏上,那损失就不可估量了。”回想起来,刘霄还有些后怕,“所以应该说,对于大部分游戏公司,云就是最好的选择,没有之一。”
2016 年,米哈游正式开启全面“出海”。在海外服务区,《崩坏 3》最初选择了一家海外云服务商,却遭遇了几次黑客的 DDoS 攻击,更有一次甚至影响用户正常访问。
这是一种非常恶意的网络攻击方法:黑客在短时间内向服务器发起大量请求,造成网络拥塞,导致正常用户无法访问。
举个更形象的例子,比如一家容纳 100 人的餐厅开业了,隔壁餐厅看着不高兴,雇了 150 个小流氓涌入这家餐厅,光坐着不吃饭,把所有空间占满了。结果,想来吃饭的普通客人都进不来。
为了防御攻击,米哈游还曾购买了额外的安全防护服务,由于技术支持和沟通效率问题,状况没有及时得到改善。
苦恼中,米哈游想起了阿里云,与阿里云工程师们合计一番,想出了一个方法——将玩家请求先通过阿里云高防 IP,经过流量清洗后,再转回原机房,从而抵挡了上百 GB 的 DDoS 攻击。
时间已经走到了 2017 年。经过几年努力,阿里云在全球的基础设施也越建越多,在那一年底,阿里云在全球拥有 17 个区域、53 个可用区,遍布亚、欧、美各地。
对于米哈游来说,此时此刻,应该是将“崩 3”全部迁至阿里云的最佳时机了。
后来,在筹划《原神》时,米哈游没有再犹豫,《原神》的全球资源,全部直接上阿里云。截至目前,曾经遭遇的海外黑客攻击,未在《原神》上出现过。
《原神》,是米哈游和阿里云共同面临的一次巨大挑战。
《原神》的规划有多宏伟?这不仅是一款开放世界游戏——意味着庞大的地图和人物画面、复杂的关卡设计和故事情节。更有难度的是,米哈游想做一款多平台、全球同步公测的游戏,也就是 PS4、iOS、Android、PC 等所有游戏平台,和全球五大服务区同时开服、同时上线,相同服务区内数据互通、无缝衔接。
例如在手机上玩《原神》,切换到电脑上,玩法和进度都可以无缝衔接。
而且,为了更好的联机游戏体验,米哈游采取的是“大通服”。
大部分游戏公司会采用“分服”的方式,一个区域内有很多个服务器,玩家达到一定数量后再增加服务器。但“通服”是将一个大区的所有用户都放在同一个服务器集群上,玩家的在线数骤增。
也就是说,等到《原神》上线的那一天,全球、全服的用户一起涌入,一时的 PCU(最高在线玩家人数)可能会远远超出日常预估。
如果米哈游能设计出这样一款产品,那么,面对这样高并发、高性能、高弹性的技术需求,阿里云能支持吗?
有些人感到忐忑,但是米哈游一如既往地选择了阿里云。这种信任源自于双方多年的合作。
米哈游对阿里云太熟了,这些年,他们看到了阿里云支撑着淘宝天猫度过了一次次 双11,每一年,阿里云支撑的计算峰值都会再高一些。
“虽然我们不是电商,但游戏和技术对于高并发的需求非常相似,从 双11 来看,我们相信阿里云的技术能力是足够的。”
他们也看到了阿里云在快速地进步。2017 年,阿里云上线了自研数据库 PolarDB,能够提供分钟级的配置升降级、秒级的故障恢复、全局数据一致性和数据备份容灾服务。
对于米哈游来说,原本在使用老式的数据库时,备份数据耗时几个小时,游戏不得不停服一个多小时;而在 PolarDB 上,备份工作能够被缩短至秒级,大大减少了数据备份的耗时,提升了版本更新效率。
2020 年 7 月,《原神》同时在 PS4、iOS、Android、PC 平台开启最终内测,进入了冲刺阶段。
阿里云的工程师们又来到了那间熟悉的会议室。在最后冲刺的这两个月中,他们再次成为这里的常驻者,“把《原神》当作阿里自己的项目来做”。
阿里云多年累积的能力,成为《原神》宏大设想实现的技术基础。
比如,被工程师们称作“一套架构,全球部署”的资源保障能力。简单说,在全球不同的服务节点上,阿里云从基础层到数据库的一套架构产品,包括云服务器、网络资源、存储、安全、数据库等等,都采用了同一套架构,提供相同的性能体验。
这为《原神》“全球同时开服”的需求提供了基础保障,意味着米哈游在全球也只需要搭建一套架构,而不需要每到一个服务区就因地制宜地改一次架构。
同时,相同的性能,确保了全球五大区能够给予玩家们统一的游戏体验,不会造成“某些功能只有特定区域有,另一些区域缺失”的情况。
再比如,PolarDB 在满足《原神》高性能游戏数据库需求的同时,又凭借着完善的产品封装形态,降低了米哈游在 IT 运维上的投入,可以让全部人马专注在游戏本身。
“我们就专心做游戏上的设计,这些基础的 IT 工作,基本都交给阿里云了。”刘霄总结说。
这是阿里云在游戏领域最大的一次全面实战。《原神》对阿里云技术的一些需求,即使已在不同客户、不同领域实践过,但这样一次性挑战所有高难度动作的项目,还是第一次。
从全球部署和预约量来看,上线后,《原神》将成为全球在云上规模最大的游戏——几个月后,这成为一个事实。
所以,连阿里云熟悉的“热迁移”,在《原神》上都要进一步升级。
热迁移,意为将整个虚拟机的运行状态完整保存下来,同时快速恢复到原有或其他硬件平台上,同时,用户在使用层面不会察觉到任何差异。
通俗点说,这有点类似于行驶在高速公路上的汽车,发动机出现报警,需要不停车完成更换。
如果说“换汽车发动机”是一般状态,那么在《原神》上,就是一次给空中的超大型飞机换发动机的过程。而且,由于游戏对稳定性的极高要求,更换过程中,“飞机”不能有丝毫的抖动和偏移。
需求从米哈游的会议室里传递回阿里云的飞天园区,从游戏业务传递到虚拟化业务,不同部门的工程师聚在一起想方法,摸索出一套通过智能运维系统对底层性能进行调整,实现在超高 QPS、高 CPU 和内存负载场景下的无损“AI 热迁移”方法。
“AI 热迁移”应用在《原神》上,迄今为止,效果非常明显。
最后两个月中,《原神》的预约量节节攀升,对服务器的需求也越来越高。终于,在服务器完成了几十次扩容并连夜进行了压力测试后,工程师们感觉到,这次,成了!
9 月 28 日,《原神》全球同步公测开启,10 点,正式上线。
那间会议室里,阿里云的 20 多名工程师紧盯着大屏上的各个指数,一个又一个峰值出现。
最终,PCU 峰值达到了某一个数值,高于所有人的预期,但云稳稳扛住了压力。就像之前已经进行过的无数次压测一样,顺利,平静。
在提瓦特大陆上,被神选中的人将被授予“神之眼”,这些人被称为——原神。
米哈游是第一代云原生企业,是云原生落地企业的最佳样本,其云上蓬勃的成长路径可以给到更多企业落地云原生的参考。云原生时代已悄然来临,越来越多的企业看到了云原生的闪光点,如何落地云原生产生实际业务价值成为企业亟待解决的共同命题。
2020 年 12 月 23 日,阿里云将
在北京国贸大酒店召开以“云原生加速企业数字创新升级”为主题的 “2020 云原生实战峰会”
。
届时,众多行业领先企业技术管理者将出席本次会议,与广大开发者共同探讨云原生落地的最佳姿势,分享不同行业企业落地时的现状、挑战和创新实践,交流云原生避坑经验。
识别下方海报二维码
或直接点击“阅读原文”即可报名“2020 云原生实战峰会”,了解更多云原生企业故事!
以上是关于米哈游春招后端-2023.03.19-第一题-米哈游的RBG矩阵-简单的主要内容,如果未能解决你的问题,请参考以下文章
2022-09-14米哈游秋招笔试三道编程题
米哈游前端面试难度
米哈游面试成功率高吗?
米哈游面试流程
围观|第一代云原生企业米哈游如何让想象发生?
Flink 在米哈游的落地实践