QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#211929#6744. Squarepsycho#AC ✓26ms3668kbC++201.6kb2023-10-12 23:44:562023-10-12 23:44:57

Judging History

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

  • [2023-10-12 23:44:57]
  • 评测
  • 测评结果:AC
  • 用时:26ms
  • 内存:3668kb
  • [2023-10-12 23:44:56]
  • 提交

answer

//I wrote this code 4 u today
#include <bits/stdc++.h>

template<class t> using vc = std::vector<t>;

#define nd node*
#define pnd pair<nd, nd>

using namespace std;
typedef long long ll;
typedef vector<ll> vll;
typedef pair<ll, ll> pll;
typedef vc<pll> vpll;
typedef vc<vll> vvll;
typedef vc<vpll> vvpll;

template<const ll MOD>
struct mod_mul : std::multiplies<const ll> {
    ll operator()(const ll a, const ll b) {
        return (a * b) % MOD;
    }
};


template<typename T>
inline void sort(T &a) {
    sort(a.begin(), a.end());
}

template<typename T>
inline void unique(T &a) {
    a.resize(unique(a.begin(), a.end()) - a.begin());
}

template<typename T>
inline void reverse(T &a) {
    reverse(a.begin(), a.end());
}

const ll INF = 9023372036854775808ll;
const ll MOD = 1000000007ll;

ll find(ll x) {
    ll now = 0;
    for (ll i = 30; i >= 0; --i) {
        ll xd = (1ll << i) + now;
        if (xd * (xd + 1) / 2 < x) now += 1ll << i;
    }
    return now + 1;
}

int main() {
    cin.tie(nullptr)->ios_base::sync_with_stdio(false);
    ll t;
    cin >> t;
    while (t--) {
        ll x, y;
        cin >> x >> y;
        if (x >= y) {
            cout << x - y << '\n';
            continue;
        }
        ll n1 = find(x), d1 = n1 * (n1 + 1) / 2 - x;
        ll n2 = find(y), d2 = n2 * (n2 + 1) / 2 - y;
        ll ans = 1e18;
        if (d1 <= d2) {
            cout << n2 - n1 + d2 - d1 << '\n';
        } else {
            cout << n2 - n1 + x + 1 - (n1 - 1) * n1 / 2 + d2 << '\n';
        }
    }
}

详细

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

score: 0
Accepted
time: 26ms
memory: 3668kb

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