QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#419078#5117. Find MaximumreverSillyWA 50ms4112kbC++231.8kb2024-05-23 17:38:552024-05-23 17:38:55

Judging History

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

  • [2024-05-23 17:38:55]
  • 评测
  • 测评结果:WA
  • 用时:50ms
  • 内存:4112kb
  • [2024-05-23 17:38:55]
  • 提交

answer

#include<bits/stdc++.h>
#define dbg //cerr<<__PRETTY_FUNCTION__<<' '<<__LINE__<<'\n'
using namespace std;
using i64=long long;
constexpr int LIM{100000};
int cache[LIM];
int f(i64 i)
{
    if(i<LIM&&cache[i]!=-1)
        return cache[i];
    int ans;
	if(i==0)
		ans=1;
	else if(i%3==0)
		ans=f(i/3)+1;
    else
        ans=f(i-1)+1;
    if(i<LIM)
        cache[i]=ans;
    return ans;
}
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);
    dbg;
	for(int i=0;l3[i]!=12;++i)
	{
        dbg;
		if(r3[i]!=l3[i])
		{
            dbg;
            // 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;
            dbg;
            for(int i=1;i<10;++i)
            {
                if(r-i>=l)
                    ans=max(ans,f(r-i));
            }
            dbg;
			return ans;
		}
	}
    dbg;
	return -1;
}
int T;
int main()
{
    // f(279345354637770906ll);
    // return 0;
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    fill_n(cache,LIM,-1);
    dbg;
    // 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--)
	{
        dbg;
		i64 l,r;
		cin>>l>>r;
		cout<<solve(l,r+1)<<'\n';
	}
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 4112kb

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: 4036kb

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
Wrong Answer
time: 50ms
memory: 4068kb

input:

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

output:

110
112
109
110
111
108
113
112
110
107
109
113
110
111
111
111
109
108
111
113
111
111
113
111
111
110
111
108
111
110
111
111
111
111
113
108
111
110
108
111
111
113
110
110
110
111
110
107
111
111
109
107
111
111
110
111
111
111
111
111
111
111
108
111
110
111
111
111
113
110
113
112
112
110
110
...

result:

wrong answer 5th numbers differ - expected: '112', found: '111'