QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#411695#6744. Squarexiwon#AC ✓26ms3784kbC++14723b2024-05-15 18:09:162024-05-15 18:09:17

Judging History

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

  • [2024-05-15 18:09:17]
  • 评测
  • 测评结果:AC
  • 用时:26ms
  • 内存:3784kb
  • [2024-05-15 18:09:16]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

ll block(ll u) {
	ll sq = sqrt(u * 2);
	if (sq * (sq + 1) / 2 >= u) return sq;
	return sq + 1;
}

int main() {
	// cout << LLONG_MAX << endl;
	int T;
	scanf("%d", &T);
	while (T--) {
		ll x, y;
		scanf("%lld%lld", &x, &y);
		if (x >= y) {
			printf("%lld\n", x - y);
			continue;
		}
		// assert(x < y);

		ll tmpx = x;
		ll bx = block(x), by = block(y);
		ll ans = by - bx;
		ll gap = bx * (bx + 1) / 2 - x;
		x = by * (by + 1) / 2 - gap;
		if (x < y) {
			ll t = tmpx - (bx - 1) * bx / 2;
			ans = ans + 1 + t;
			x = by * (by + 1) / 2;
		}
		// assert(x >= y);

		ans += x - y;

		printf("%lld\n", ans);
	}
}

详细

Test #1:

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

input:

2
5 1
1 5

output:

4
3

result:

ok 2 number(s): "4 3"

Test #2:

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

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