网易互娱游戏研发暑期实习笔试(2020.04.11晚上19:00-21:30)

三道笔试,全是编程。AC了前两道,记录一下。
题目图片来自牛客网
https://www.nowcoder.com/discuss/405887?type=post&order=create&pos=&page=1

1

40米大刀
在这里插入图片描述在这里插入图片描述
思路:把补给品取出来,按距离排序,逐一砍下。multimap容器非常适合本题。下面是AC的代码:

#include 
#include 
#include 
#include 
using namespace std;
long long func(vector > &table, int l, int x, int y)
{multimap want;for (int i = 0; i < table.size(); ++i){for (int j = 0; j < table.size(); ++j){if (table[i][j] > 0){double dis = sqrt((i - x) * (i - x) + (j - y) * (j - y));int value = table[i][j];want.insert({dis, value});}}}long long res = l;for (auto it = want.begin(); it != want.end();){//cout << it->first << ' ';if (it->first - res < 0.00000000000000000001){res += it->second;++it;}elsebreak;}//cout << endl;return res;//long long res = l;}int main()
{int t;cin >> t;while (t--){int m, l, x, y;cin >> m >> l;vector > table(m, vector(m));for (int i = 0; i < m; ++i){for (int j = 0; j < m; ++j){cin >> table[i][j];}}cin >> x >> y;cout << func(table, l, x, y) << endl;}return 0;
}

上面代码还可以优化,距离只是用来比较,可以用平方来比较,从而不必开方引入double数据。

2

在这里插入图片描述
思路:用set表示集合,放入vector中表示全部的集合,用map记录每个数所在的集合。下面是AC的代码

#include 
#include 
#include 
#include 
using namespace std;int main()
{int t;while(cin >> t){while (t--){int n, m;cin >> n >> m;map ma;vector > vs(n + 1);for (int i = 1; i <= n; ++i){ma[i] = i;vs[i].insert(i);}while (m--){int op, x, y;cin >> op;if (op == 1){cin >> x >> y;if (ma[x] != ma[y]){int k = ma[y];while (!vs[k].empty()){int v = *(vs[k].begin());vs[k].erase(vs[k].begin());vs[ma[x]].insert(v);ma[v] = ma[x]; }//cout << vs[ma[y]].size() << ' ' << vs[ma[x]].size() << endl;} }else if (op == 2){cin >> x;if (vs[ma[x]].size() != 1){for (int i = 1; i <= n; ++i){if (vs[i].empty()){//cout << "new place" << endl;vs[i].insert(x);vs[ma[x]].erase(x);ma[x] = i;break;}}}}else{cin >> x;cout << vs[ma[x]].size() << endl;}}}}return 0;
}

3

在这里插入图片描述
这题没做,可以参考这里的讨论:
https://www.nowcoder.com/discuss/405821?type=post&order=time&pos=&page=3
https://www.nowcoder.com/discuss/405922?type=post&order=time&pos=&page=1


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部