网易互娱游戏研发工程师,第一道题,40米大刀,代码比较丑,大家可以互相讨论一下,求大佬轻喷~
题目:暂时没有。。。
#include <iostream> #include <vector> #include <cmath> using namespace std; // 自定义的一个9数量级的int最大值,满足最大值*2依然最大值(不会溢出的意思) const int int_max = 0x3f3f3f3f; // 获取两点之间的距离 double dis(int x1, int y1, int x2, int y2) { int x = abs(x1 - x2); int y = abs(y1 - y2); return sqrt(pow(x, 2) + pow(y, 2)); } // 这个是获取积分和玩家的距离的二维数组,如果不存在积分就会标记为int_max vector<vector<double>> diss(vector<vector<int>> vvi, int size, int x, int y) { // 申请动态二维数组 vector<vector<double>> res(size, vector<double>(size, int_max)); for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { if (vvi[i][j] != 0) { res[i][j] = dis(x, y, i, j); } } } return res; } // 取得小于等于大刀距离的积分的坐标 bool getL(vector<vector<double>> &vvi, int len, int &rx, int &ry) { for (int i = 0; i < vvi.size(); ++i) { for (int j = 0; j < vvi.size(); ++j) { if (vvi[i][j] <= len) { vvi[i][j] = int_max; rx = i; ry = j; return true; } } } return false; } int main(int argc, char const *argv[]) { int T; cin >> T; for (int i = 0; i < T; ++i) { int M, L; cin >> M >> L; // 申请动态二维数组 vector<vector<int>> place(M, vector<int>(M, 0)); for (int j = 0; j < M; ++j) { for (int k = 0; k < M; ++k) { cin >> place[j][k]; } } int x, y; cin >> x >> y; // 获取距离表 vector<vector<double>> dist = diss(place, M, x, y); int rx, ry; while (true) { // 获取坐标 bool ans = getL(dist, L, rx, ry); if (!ans) { break; } else { // 增加大刀长度 L += place[rx][ry]; } } // 输出最终大刀长度 cout << L << endl; } // system("pause"); return 0; }
全部评论
(3) 回帖