QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#589255#5920. Many PrizesWRYYY20 ✓1ms3652kbC++141.4kb2024-09-25 16:55:242024-09-25 16:55:24

Judging History

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

  • [2024-09-25 16:55:24]
  • 评测
  • 测评结果:20
  • 用时:1ms
  • 内存:3652kb
  • [2024-09-25 16:55:24]
  • 提交

answer

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define m_p make_pair
#define m_t make_tuple
#define N 55
using namespace std;
ll p2[N];
ll getbrk(ll l, ll r, ll les) // get best rank of x
{
	if (l == r)
		return l;
	ll mid = l + r >> 1;
	if (les)
		return getbrk(l, mid, (les - 1) >> 1);
	return getbrk(mid + 1, r, 0);
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int T;
	cin >> T;
	ll n, p, l, r, ans, mid;
	p2[0] = 1;
	for (int i = 1; i < N; i++)
		p2[i] = p2[i - 1] * 2ll;
	for (int zzz = 1; zzz <= T; zzz++)
	{
		cin >> n >> p;
		cout << "Case #" <<zzz<< ": ";
		if (p == p2[n])
			cout << p2[n] - 1 << " " << p2[n] - 1;
		else if (p == 1)
			cout << "0 0";
		else if (p <= p2[n - 1])
		{
			cout << "0 ";
			ans = 1;
			l = 1;
			r = p2[n] - 1;
			while (l <= r)
			{
				mid = l + r >> 1;
				if (getbrk(1, p2[n], p2[n] - mid) <= p)
				{
					l = mid + 1;
					ans = mid;
				}
				else
					r = mid - 1;
			}
			cout << ans - 1;
		}
		else
		{
			p = p2[n] - p;
			ans = 1;
			l = 1;
			r = p2[n] - 1;
			while (l <= r)
			{
				mid = l + r >> 1;
				if (getbrk(1, p2[n], p2[n] - mid) <= p)
				{
					l = mid + 1;
					ans = mid;
				}
				else
					r = mid - 1;
			}
			cout << p2[n] - ans - 1 << " " << p2[n] - 2;
		}
		cout << "\n";
	}
	return 0;
}

详细

Subtask #1:

score: 7
Accepted

Test #1:

score: 7
Accepted
time: 0ms
memory: 3652kb

input:

100
7 97
1 1
3 2
7 39
9 500
5 19
10 964
9 512
10 897
9 3
5 32
3 4
10 511
5 31
3 8
9 257
10 1023
6 4
6 52
7 127
6 32
7 124
4 2
10 1024
10 512
5 16
6 33
9 255
7 106
8 102
7 3
3 5
6 63
5 28
10 896
3 7
8 245
5 22
6 31
10 513
6 55
6 33
5 23
10 13
6 47
9 504
10 979
6 29
8 252
5 21
2 4
6 57
8 12
8 28
10 25...

output:

Case #1: 6 126
Case #2: 0 0
Case #3: 0 4
Case #4: 0 124
Case #5: 62 510
Case #6: 2 30
Case #7: 30 1022
Case #8: 511 511
Case #9: 14 1022
Case #10: 0 256
Case #11: 31 31
Case #12: 0 6
Case #13: 0 1020
Case #14: 30 30
Case #15: 7 7
Case #16: 2 510
Case #17: 1022 1022
Case #18: 0 48
Case #19: 6 62
Case...

result:

ok 100 lines

Subtask #2:

score: 13
Accepted

Test #2:

score: 13
Accepted
time: 1ms
memory: 3624kb

input:

100
19 524195
5 15
24 16777094
14 16128
21 1
8 29
20 1048404
42 33554432
26 33554433
1 1
7 9
46 153688554
43 1073741823
6 53
49 536870911
13 300
3 3
6 53
43 8796090966783
9 512
32 2147483647
50 403864
43 4398046511103
7 1
38 274876961061
35 55
27 22146
21 255
5 22
38 206158430209
39 34359738367
38 2...

output:

Case #1: 8190 524286
Case #2: 0 28
Case #3: 262142 16777214
Case #4: 62 16382
Case #5: 0 0
Case #6: 0 240
Case #7: 8190 1048574
Case #8: 0 4398046380032
Case #9: 2 67108862
Case #10: 0 0
Case #11: 0 112
Case #12: 0 70368743653376
Case #13: 0 8796093005824
Case #14: 6 62
Case #15: 0 562949951324160
C...

result:

ok 100 lines

Extra Test:

score: 0
Extra Test Passed