QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#650790#9427. Collect the CoinsUESTC_Snow_Halation#WA 17ms3752kbC++141.9kb2024-10-18 16:30:342024-10-18 16:30:35

Judging History

你现在查看的是最新测评结果

  • [2024-11-06 15:56:27]
  • hack成功,自动添加数据
  • (/hack/1139)
  • [2024-10-18 16:30:35]
  • 评测
  • 测评结果:WA
  • 用时:17ms
  • 内存:3752kb
  • [2024-10-18 16:30:34]
  • 提交

answer

#include <iostream>
#include <algorithm>

using namespace std;

typedef long long ll;
typedef double db;

const int N = 1e6 + 7;

int n;

struct Coin
{
    int t, p;
}a[N];

struct Seg
{
    ll l, r;
    bool empty()
    {
        return !l && !r;
    }
    void inc(ll x)
    {
        if (empty())
            return;
        l -= x;
        r += x;
    }
    bool in(int pos)
    {
        return l <= pos && pos <= r;
    }
}b[2];

bool check(ll v)
{
    b[0] = b[1] = {};
    for (int i = 1; i <= n; i++)
    {
        ll delta_t = (a[i].t - a[i - 1].t) * v;
        b[0].inc(delta_t);
        b[1].inc(delta_t);
        if (b[0].empty() || b[1].empty())
        {
            if (b[0].empty() || b[0].in(a[i].p))
                b[0] = {a[i].p, a[i].p};
            else
                b[1] = {a[i].p, a[i].p};
        }
        else
        {
            bool t1 = b[0].in(a[i].p),
                 t2 = b[1].in(a[i].p);
            if (!t1 && !t2)
                return 0;
            if (t1 && t2)
            {
                if (b[1].l <= b[0].l && b[0].r <= b[1].r)
                    b[0] = {a[i].p, a[i].p};
                else
                {
                    b[1] = {min(b[0].l, b[1].l), max(b[0].r, b[1].r)};
                    b[0] = {a[i].p, a[i].p};
                }
            }
        }
    }
    return true;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin >> T;
    while (T--)
    {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i].t >> a[i].p;
        ll L = 0, R = 1e9, Ans = -1;
        while (L <= R)
        {
            ll mid = L + R >>1;
            if (check(mid))
                Ans = mid, R = mid - 1;
            else
                L = mid + 1;
        }
        cout << Ans << "\n";
    }
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 3736kb

input:

3
5
1 1
3 7
3 4
4 3
5 10
1
10 100
3
10 100
10 1000
10 10000

output:

2
0
-1

result:

ok 3 lines

Test #2:

score: -100
Wrong Answer
time: 17ms
memory: 3752kb

input:

1135
2
6 5
8 8
8
2 9
2 10
4 4
5 3
6 2
6 8
8 2
8 7
1
9 1
6
4 6
6 1
6 2
9 10
10 1
10 7
5
1 6
2 5
6 7
8 6
10 3
8
1 10
5 4
5 7
6 1
6 6
8 4
9 1
9 4
8
1 1
1 3
2 9
3 3
5 9
6 10
9 7
10 7
3
5 8
6 6
10 6
7
2 9
4 7
5 10
6 3
6 7
8 9
10 1
6
1 4
2 8
5 9
7 10
9 1
10 5
9
2 7
4 5
5 9
6 10
7 4
9 4
9 9
10 3
10 7
1
3 1...

output:

0
3
0
2
1
3
6
0
2
1
1
0
1
5
0
1
5
1
2
0
0
0
1
2
2
0
1
1
3
0
3
2
3
1
1
1
1
1
0
1
1
1
0
1
0
1
0
1
0
1
1
0
2
3
1
4
1
1
1
0
1
2
0
1
3
4
2
0
0
2
1
6
2
2
1
0
0
1
0
2
1
2
0
1
1
3
0
0
1
1
0
3
0
2
2
2
1
0
0
0
3
1
2
0
2
1
1
1
2
1
2
0
3
1
1
2
2
0
8
1
1
1
0
2
1
4
1
1
0
0
0
1
2
1
1
0
0
2
1
2
1
1
2
3
3
0
3
2
3
2
...

result:

wrong answer 4th lines differ - expected: '3', found: '2'