QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#632163#5117. Find MaximumGreen_Hand#WA 1ms1648kbC++201.1kb2024-10-12 12:41:222024-10-12 12:41:24

Judging History

This is the latest submission verdict.

  • [2024-10-12 12:41:24]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 1648kb
  • [2024-10-12 12:41:22]
  • Submitted

answer

#include <cstdio>
#include <cstring>
using namespace std;

typedef long long ll;
int T,ans,cnt,a[99],b[99]; ll l,r,pow[99];

int max(int x,int y) { return x > y ? x : y; }

void read(int &x)
{
	char c = getchar(); x = 0;
	while(c < '0' || c > '9') c = getchar();
	while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
}

int count(ll x)
{
	int rest = 0;
	for(;x;x /= 3) rest += x % 3 + 1;
	return rest;
}

void check(ll x) { if(x >= l && x <= r) ans = max(ans,count(x)); }

void dfs(int now,ll x)
{
	if(now == 0) { check(x); return; }
	for(int i = 0;i <= a[now]; ++ i)
		if(i < a[now]) check(x + (i + 1) * pow[now] - 1);
		else dfs(now - 1,x + i * pow[now]);
}

int main()
{
	pow[0] = 1;
	for(int i = 1;i <= 50; ++ i) pow[i] = pow[i - 1] * 3;
	
	for(scanf("%d",&T);T--;)
	{
		scanf("%lld%lld",&l,&r);
		ans = count(r);
		if(r - 1 >= l) ans = max(ans,count(r - 1));
		if(r - 2 >= l) ans = max(ans,count(r - 2));
		
		for(cnt = 0;pow[cnt] <= r; ++cnt);
		--cnt;
		
		for(int i = cnt;i >= 0; -- i)
			a[i] = r / pow[i], r -= pow[i] * a[i];
		dfs(cnt,0ll), printf("%d\n",ans);
	}
	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

10
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

output:

3
3
4
5
3
4
5
4
5
5

result:

ok 10 numbers

Test #2:

score: -100
Wrong Answer
time: 1ms
memory: 1648kb

input:

5050
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 61...

output:

2
3
3
4
5
5
5
6
6
6
6
6
6
7
7
7
8
8
8
7
7
7
8
8
8
9
9
9
7
7
7
8
8
8
9
9
9
8
8
8
9
9
9
10
10
10
9
9
9
10
10
10
11
11
11
8
8
8
9
9
9
10
10
10
9
9
9
10
10
10
11
11
11
10
10
10
11
11
11
12
12
12
8
8
8
9
9
9
10
10
10
9
9
9
10
10
10
11
11
11
3
3
4
5
5
5
6
6
6
6
6
6
7
7
7
8
8
8
7
7
7
8
8
8
9
9
9
7
7
7
8
8
...

result:

wrong answer 20th numbers differ - expected: '8', found: '7'