您的位置:首页 > 其它

Codeforces Round #Pi (Div. 2)

2015-08-07 17:16 260 查看
A. Lineland Mail (567A Lineland Mail)

题目描述:

  给出n个升序排列的数,问每个数与除自身之外的n-1个数的绝对值最大和最小分别是什么?

解题思路:

  因为给出的序列已经排好序了,对于每个数绝对值最小的肯定是左右相邻的两个数的绝对值取最小啦,绝对值最大就是和第一个数或者最后一个数的绝对值取最大咯,第一个数和最后一个数特殊处理一下就好啦。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int shot1[maxn], shot2[maxn];
int n, m, a, k;
int solve (int x)
{
for (int i=1; i<=x; i++)
shot2[i] = shot1[i];
int ans = 0;
shot2[0] = 0;
shot2[x+1] = n+1;
sort (shot2, shot2+x+2);
for (int i=1; i<=x+1; i++)
ans += (shot2[i] - shot2[i-1]) / (a + 1);
return ans;
}
int main ()
{
while (scanf ("%d %d %d", &n, &k, &a) != EOF)
{
scanf ("%d", &m);
for (int i=1; i<=m; i++)
scanf ("%d", &shot1[i]);
int low = 1, high = m, mid, res = n + 1;
while (low <= high)
{
mid = (low + high) / 2;
int ans = solve (mid);

if (ans >= k)

low = mid + 1;
else
{
high = mid - 1;
res = min (res, mid);
}
}
if (res == n+1)
res = -1;
printf ("%d\n", res);
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: