QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#145305#6744. Squareberarchegas#AC ✓103ms3716kbC++171.1kb2023-08-22 04:25:572023-08-22 04:26:00

Judging History

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

  • [2023-08-22 04:26:00]
  • 评测
  • 测评结果:AC
  • 用时:103ms
  • 内存:3716kb
  • [2023-08-22 04:25:57]
  • 提交

answer

#include <bits/stdc++.h>
 
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
 
mt19937 rng((int) chrono::steady_clock::now().time_since_epoch().count());
    
const int MOD = 1e9 + 7;
const int MAXN = 2e5 + 5;
const ll INF = 2e18;

ll f(ll x) { return x + floor(sqrtl(2*x) + 1.5); }

ll numSteps(ll x, ll y)
{
    ll ans = 0;
    ll t = floor(sqrtl(2*x) + 1.5);
    ll q = ceil((-2*t - 1 + sqrtl(4*t*t - 4*t + 1 + 8*y - 8*x))/2);

    // cout << "x = " << x << " t = " << t << " q = " << q << endl;
    // cout << q << endl;

    x += (2*t + q)*(q + 1)/2;
    return (q + 1) + (x - y);
}

ll query(ll x, ll y)
{
    if( x > y )
        return x - y;

    ll t = floor(sqrtl(2*x) + 1.5);
    ll st = (t - 2)*(t - 1)/2;

    // cout << st << endl;

    ll ans = numSteps( x , y );
    ans = min( ans , (x - st) + numSteps( st , y ) );

    return ans;
}

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;

    while( t-- )
    {
        ll x, y;
        cin >> x >> y;

        cout << query( x , y ) << endl;
    }

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 2ms
memory: 3588kb

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

score: 0
Accepted
time: 103ms
memory: 3716kb

input:

100000
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
1 10
1 11
1 12
1 13
1 14
1 15
1 16
1 17
1 18
1 19
1 20
1 21
1 22
1 23
1 24
1 25
1 26
1 27
1 28
1 29
1 30
1 31
1 32
1 33
1 34
1 35
1 36
1 37
1 38
1 39
1 40
1 41
1 42
1 43
1 44
1 45
1 46
1 47
1 48
1 49
1 50
1 51
1 52
1 53
1 54
1 55
1 56
1 57
1 58
1 59
1 60
1 ...

output:

0
2
1
4
3
2
6
5
4
3
8
7
6
5
4
10
9
8
7
6
5
12
11
10
9
8
7
6
14
13
12
11
10
9
8
7
16
15
14
13
12
11
10
9
8
18
17
16
15
14
13
12
11
10
9
20
19
18
17
16
15
14
13
12
11
10
22
21
20
19
18
17
16
15
14
13
12
11
24
23
22
21
20
19
18
17
16
15
14
13
12
26
25
24
23
22
21
20
19
18
1
0
2
2
1
3
4
3
2
4
6
5
4
3
5
...

result:

ok 100000 numbers