QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#419059#5117. Find MaximumreverSillyTL 0ms3796kbC++231.4kb2024-05-23 17:23:272024-05-23 17:23:28

Judging History

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

  • [2024-05-23 17:23:28]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:3796kb
  • [2024-05-23 17:23:27]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
using i64=long long;
int f(int i)
{
	if(i==0)
		return 1;
	if(i%3==0)
		return f(i/3)+1;
	return f(i-1)+1;
}
int log3(i64 x)
{
    if(x==0)
        return 1;
	return log2(x)/log2(3)+1;
}
void itoa(i64 number,char *dest,int n){
    stack<char> s;
    if (number == 0) 
	{
        s.push(0);
    } else 
	{
        while (number) {
            s.push(number % n);
            number /= n;
        }
    }
    while (!s.empty())
    {
		*(dest++)=s.top();
        // printf("%d", s.top());
        s.pop();
    }
	*(dest++)=12;
}
i64 solve(i64 l,i64 r)
{
	char l3[50],r3[50];
	itoa(l,l3+log3(r)-log3(l),3);
	itoa(r,r3,3);
	fill_n(l3,log3(r)-log3(l),0);
	for(int i=0;l3[i]!=12;++i)
	{
		if(r3[i]!=l3[i])
		{
            // cout<<(i==0&&r3[0]==1)<<'\n';
            int ans=log3(r)-(i==0&&r3[0]==1)+accumulate(r3,r3+i+1,0)-1+(log3(r)-i-1)*2;
            for(int i=1;i<20;++i)
            {
                if(r-i>=l)
                    ans=max(ans,f(r-i));
            }
			return ans;
		}
	}
	return -1;
}
int T;
int main()
{
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    // char ch[10];
    // itoa(10,ch,3);
    // cout<<ch;
    // return 0;
	// for(int i=0;i<200;++i)
	// 	cout<<i<<' '<<f(i)<<'\n';
	cin>>T;
	while(T--)
	{
		i64 l,r;
		cin>>l>>r;
		cout<<solve(l,r+1)<<'\n';
	}
    return 0;
}

詳細信息

Test #1:

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

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: 0
Accepted
time: 0ms
memory: 3676kb

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
8
8
8
8
8
8
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
10
10
10
10
10
10
10
10
10
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
3
3
4
5
5
5
6
6
6
6
6
6
7
7
7
8
8
8
8
8
8
8...

result:

ok 5050 numbers

Test #3:

score: -100
Time Limit Exceeded

input:

10000
2924776299390853 348932224550662831
638290869233943020 897334616745111026
210780034220004669 279345354637770906
20574264013277469 387573622060864735
39441497975868873 806211034038773415
19845198891021950 243636832211738144
298454268109304380 988142879006387197
613847475002049291 86666797163210...

output:


result: