QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#419108#5117. Find MaximumreverSillyWA 1ms3964kbC++232.1kb2024-05-23 17:56:432024-05-23 17:56:44

Judging History

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

  • [2024-05-23 17:56:44]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3964kb
  • [2024-05-23 17:56:43]
  • 提交

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[55],r3[55];
	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)
    //     cout<<(char)(l3[i]+'0');
    // cout<<'\n';
    // for(int i=0;r3[i]!=12;++i)
    //     cout<<(char)(r3[i]+'0');
    // cout<<'\n';//2101000201022101010212021100000112101
    int ans=-1;
	for(int i=0;l3[i]!=12;++i)
	{
        dbg;
		if(r3[i]!=l3[i])
		{
            dbg;
            // cout<<(i==0&&r3[0]==1)<<'\n';
            ans=max(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<20;++i)
            // {
            //     if(r-i>=l)
            //         ans=max(ans,f(r-i));
            // }
            dbg;
		}
	}
    dbg;
	return ans;
}
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: 0
Wrong Answer
time: 1ms
memory: 3964kb

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
3
5
4
5
5

result:

wrong answer 6th numbers differ - expected: '4', found: '3'