据说是网易游戏面试题

2024-01-19 22:08
文章标签 面试题 游戏 网易 据说

本文主要是介绍据说是网易游戏面试题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

据说是网易游戏面试题

题意:

一条直线上有n个小球,初始坐标及速度已知,且球的初始位置两两不相同。若任意两个球相遇后则两球均消失,找出最后还留在直线上的球。

分析:

题意很清楚明了,任意两个小球之间无非两种情况(一起消失、永不相遇)。那么最先相遇的必然是两个相邻的小球,排除掉这俩球后就又回到了最初的状态。所以把所有球按坐标从小到大排序,用带有排序功能的容器保存相邻小球相遇的时间,每次去掉最先相遇的小球直到剩下的球永不相遇或全部消失。时间复杂度为:O(n log n)
当然了,这玩意面试的时候空口说起来容易,实打实在纸上敲一边貌似还是有很多细节需要考虑的。举个例子,若当前剩下球a、b、c、d,b和c最先相遇,去掉(b,c)后如何快速定位并删除(a,b)和(c,d)并构建(a,d)。同时还要注意代码的简洁

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define urp(i,a,b) for(int i=(a),__tzg_##i=(b); i>=__tzg_##i; --i)
#define rp(i,b) for(int i=(0), __tzg_##i=(b);i<__tzg_##i;++i)
#define rep(i,a,b) for(int i=(a), __tzg_##i=(b);i<__tzg_##i;++i)
#define repd(i,a,b) for(int i=(a), __tzg_##i=(b);i<=__tzg_##i;++i)
#define mst(a,b) memset(a,b,sizeof(a))
#define px first
#define py second
#define __0(x) (!(x))
#define __1(x) (x)
typedef pair<int,int> pii;
const ll mod = 1000000007;
const int MAXM = 15;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
#define mp(a,b) make_pair(a,b)
typedef vector<int> VI;
typedef vector<ll> VL;
typedef vector<pii> VPII;
typedef vector<string> VS;
typedef vector<VI> VVI;
typedef vector<VL> VVL;
const int N = 20;
const double INF = 1e100;
inline int cmp(double a, double b) {return (a-b>eps) - (a-b<-eps);
}
inline int cmp(double a) {return cmp(a, 0.0);
}
class Node;
class QueueNode;
class Calc;
typedef list<Node>::iterator LT;
typedef set<QueueNode>::iterator ST;
class Node {
public:double pos_;double speed_;int removed_;int idx_;Node(double pos, double speed, int idx) {this->pos_ = pos;this->speed_ = speed;this->idx_ = idx;removed_ = 0;}int neverMeet(const Node & nd) const {int b = cmp(pos_, nd.pos_), c = cmp(speed_, nd.speed_);if (b == 0)return 0;if (c == 0)return 1;if (b > 0 && c>=0)return 1;if (b < 0 && c<=0)return 1;return 0;}double getTime(const Node & nd) const {if (neverMeet(nd))return INF;return fabs(pos_ - nd.pos_)/fabs(speed_ - nd.speed_);}bool operator < (const Node & a) const {return cmp(pos_, a.pos_) < 0;}
};class QueueNode {
public:LT t1_, t2_;double time_;int id_;QueueNode(LT t1, LT t2, int id) {this->t1_ = t1;this->t2_ = t2;this->id_ = id;time_ = t1_->getTime(*t2_);}bool operator < (const QueueNode & nd) const {int k = cmp(time_, nd.time_);return k==0?id_<nd.id_:k<0;}
};
class Calc {
public:VI solve(vector<double> speed, vector<double> pos) {map<pair<Node*,Node*>, ST> mmp;set<QueueNode> sq;vector<Node> nl;int n = speed.size();rp(i, n) {nl.push_back(Node(pos[i], speed[i], i));}sort(nl.begin(), nl.end());list<Node> vn;rp(i, n) {vn.push_back(nl[i]);}LT it = vn.begin();int id = 1;for (++it; it != vn.end(); ++it) {LT yt = it;--yt;QueueNode nd(yt, it, id++);sq.insert(nd);ST t = sq.find(nd);mmp[make_pair(&*yt, &*it)] = t;}while (!sq.empty()) {ST t = sq.begin();QueueNode qd = *t;if (qd.time_ >= INF)break;LT t1 = qd.t1_, t2 = qd.t2_, p = vn.end(), q = vn.end();if (t1 != vn.begin()) {p = t1;--p;sq.erase(mmp[mp(&*p, &*t1)]);}sq.erase(mmp[mp(&*t1, &*t2)]);t1->removed_ = 1;t2->removed_ = 1;q = t2;++q;if (q != vn.end() ) {sq.erase(mmp[mp(&*t2, &*q)]);}if (p != vn.end() && q != vn.end()) {QueueNode tp(p, q, qd.id_);sq.insert(tp);mmp[mp(&*p, &*q)] = sq.find(tp);}}VI res;for(LT i = vn.begin(); i != vn.end(); ++i) {if (!i->removed_)res.push_back(i->idx_);}return res;}
};
int main() {Calc c;VI res = c.solve({-1,0,1,2}, {1,2,-3,-1});cout<<res.size()<<endl;rp(i, res.size()) {cout<<res[i]<<endl;}return 0;
}


这篇关于据说是网易游戏面试题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623845

相关文章

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

一些其他面试题

阿里二面:那你来说说定时任务?单机、分布式、调度框架下的定时任务实现是怎么完成的?懵了。。_哔哩哔哩_bilibili 1.定时算法 累加,第二层每一个格子是第一层的总时间400 ms= 20 * 20ms 2.MQ消息丢失 阿里二面:高并发场景下引进消息队列有什么问题?如何保证消息只被消费一次?真是捏了一把汗。。_哔哩哔哩_bilibili 发送消息失败

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

火柴游戏java版

代码 /*** 火柴游戏* <p>* <li>有24根火柴</li>* <li>组成 A + B = C 等式</li>* <li>总共有多少种适合方式?</li>* <br>* <h>分析:</h>* <li>除去"+"、"="四根,最多可用火柴根数20根。</li>* <li>全部用两根组合成"1",最大数值为1111。使用枚举法,A和B范围在0~1111,C为A+B。判断</li>** @

国产游戏行业的崛起与挑战:技术创新引领未来

国产游戏行业的崛起与挑战:技术创新引领未来 近年来,国产游戏行业蓬勃发展,技术水平不断提升,许多优秀作品在国际市场上崭露头角。从画面渲染到物理引擎,从AI技术到服务器架构,国产游戏已实现质的飞跃。然而,面对全球游戏市场的激烈竞争,国产游戏技术仍然面临诸多挑战。本文将探讨这些挑战,并展望未来的机遇,深入分析IT技术的创新将如何推动行业发展。 国产游戏技术现状 国产游戏在画面渲染、物理引擎、AI

【Kubernetes】常见面试题汇总(三)

目录 9.简述 Kubernetes 的缺点或当前的不足之处? 10.简述 Kubernetes 相关基础概念? 9.简述 Kubernetes 的缺点或当前的不足之处? Kubernetes 当前存在的缺点(不足)如下: ① 安装过程和配置相对困难复杂; ② 管理服务相对繁琐; ③ 运行和编译需要很多时间; ④ 它比其他替代品更昂贵; ⑤ 对于简单的应用程序来说,可能不

【附答案】C/C++ 最常见50道面试题

文章目录 面试题 1:深入探讨变量的声明与定义的区别面试题 2:编写比较“零值”的`if`语句面试题 3:深入理解`sizeof`与`strlen`的差异面试题 4:解析C与C++中`static`关键字的不同用途面试题 5:比较C语言的`malloc`与C++的`new`面试题 6:实现一个“标准”的`MIN`宏面试题 7:指针是否可以是`volatile`面试题 8:探讨`a`和`&a`