文章
16
粉丝
0
获赞
66
访问
3.5k
#非原创参考博客园:1018: 士兵排阵(2016年中南大学研究生复试机试题 ) - 我是happy唐啊 - 博客园
思路分析如下:
首先这个问题可以分开来看,x和y的选择互不干扰。然后我们从单一方向分析就能轻易发现其实是在一堆数值中求中位数,先分析y方向,我们只需将y收集到一个数组然后进行排序求出中位数即可,关键是x方向上,我们只需将其减去其输入顺序即可转换成和y一样的求法(本题难点)。如给出的输入样例:x依次输入的值是1 2 1 3 3 减去其对应的数组下标便得到 1 1 -1 0 -1,易求中位数为0
接下来就是求每个士兵对应的移动量之和即可。
具体代码实现如下:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int posx[1000], posy[1000];
for (int i = 0; i < n; i++)
cin >> posx[i] >> posy[i];
sort(posx, posx + n);
sort(posy, posy + n);
for (int j = 0; j < n; j++)
posx[j] -= j;
sort(posx, posx + n);
int mx = posx[n / 2];
int my = posy[n / 2];
int count = 0;
for (int k = 0; k < n; k++)
{
...
登录后发布评论
暂无评论,来抢沙发