takapt0226's diary

競技プログラミングのことを書きます

POJ 3618 Exploration

ソースコード

int main()
{
    int t, n;
    scanf("%d%d", &t, &n);

    set<int> pos;
    rep(i, n)
    {
	int x;
	scanf("%d", &x);
	pos.insert(x);
    }
    const int inf = ten(9) + 100;
    pos.insert(-inf);
    pos.insert(inf);

    int res = 0, p = 0;
    ll past = 0;
    for (;;)
    {
	set<int>::iterator it = pos.lower_bound(0);
	int right = *it;
	int left = *--it;
	int to = -left < right ? left : right;
	past += abs(to - p);
	p = to;
	pos.erase(to);
	if (past >= t)
	    break;

	++res;
    }
    printf("%d\n", res);
}