一堆棋子java代码编程_网易2018校招内推编程题-堆棋子-C++实现

0 1 3 10

解法

暴力枚举所有可能的点。

如图所示,黑点为输入点。所需遍历的点为红线的交点,红圈表示。

当时自己写的是遍历了外围红线所构成的封闭矩形里面所有的点了,只有60%的AC率,原因超时。

看了康学长的代码,才知道有些点不需要遍历,只需要遍历红线交点即可。

自己又重新写了一遍,给大家参考。

ba6ee4aab4089a0bf31efd2b52a99daf.png

#include

#include

#include

using namespace std;

void getInput(vector&arr, const int &k)

{

for (int i = 0; i < k; i++)

{

cin >> arr[i];

}

}

void getDist(vector&x, vector&y, vector&dist)

{

int size = x.size();

for (int i = 0; i < size; ++i)

{

for (int j = 0; j < size; ++j)//遍历所有组合点

{

vector tempdist(size,0);

for (int k = 0; k < size; ++k)

{

tempdist[k] = abs(x[k] - x[i]) + abs(y[k] - y[j]);

}

sort(tempdist.begin(),tempdist.end());//单点距离排序

for (int m = 1; m < size; ++m)//多点距离和升序

{

tempdist[m] = tempdist[m - 1] + tempdist[m];

}

if (dist.size() == 0)

{

dist = tempdist;

}

else

{

for (int m = 0; m < size; ++m)//选择最小

{

if (tempdist[m] < dist[m])

dist[m] = tempdist[m];

}

}

}

}

}

int main()

{

int n;

vector result;

cin >> n;

vector x(n,0), y(n,0);

getInput(x, n);

getInput(y, n);

getDist(x,y, result);

for (int i = 0; i

{

cout << result[i] << " ";

}

cout << endl;

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值