QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#419086 | #5117. Find Maximum | reverSilly | WA | 208ms | 7764kb | C++23 | 1.8kb | 2024-05-23 17:40:41 | 2024-05-23 17:40:42 |
Judging History
answer
#include<bits/stdc++.h>
#define dbg //cerr<<__PRETTY_FUNCTION__<<' '<<__LINE__<<'\n'
using namespace std;
using i64=long long;
constexpr int LIM{1000000};
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<50;++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;
}
详细
Test #1:
score: 100
Accepted
time: 2ms
memory: 7592kb
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: 7764kb
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: 208ms
memory: 7528kb
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'