QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#65095#5117. Find MaximumTntac7WA 4ms3568kbC++1.7kb2022-11-27 15:56:342022-11-27 15:56:36

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-11-27 15:56:36]
  • 评测
  • 测评结果:WA
  • 用时:4ms
  • 内存:3568kb
  • [2022-11-27 15:56:34]
  • 提交

answer

#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;

#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define fi first
#define se second
typedef long long ll;

inline void solve()
{
	string a1,a2;
	ll l,r;
	scanf("%lld%lld",&l,&r);
	//cout << l << ' ' << r << '\n';
	while(l)
	{
		int t=l%3;
		char ch='0'+t;
		l/=3;
		a1=ch+a1;
	}
	int sum=0;
	while(r)
	{
		int t=r%3;
		sum+=t;
		char ch='0'+t;
		r/=3;
		a2=ch+a2;
	}
	//cout << a1 << ' ' << a2 << '\n';
	int len=a2.size();
	sum+=len;
	
	string ck1,ck2,ck3;
	for(int i=0;i<len;i++) ck1+='2',ck3+='1';
	ck2+='1';
	for(int i=0;i+1<len;i++) ck2+='2';
	int ans=0;
	if(a2.size()>=a1.size()+1)
	{
		//cout << ck1 << ' ' << ck3 << ' ' << ck2 << '\n';
		//puts("1111");
		if(a2==ck1)
		{
			ans=len*2+len;
		}
		else
		{
			if(a2[0]=='2'||a2==ck2) 
			{
				ans=len*2-1+len;
			}
			else 
			{
				ans=(len-1)*2+len-1;
			}
			bool flag=true;
			for(int i=0;i<len;i++)
			{
				if(a2[i]<'1')
				{
					flag=false;
					break;
				}
			}
			if(a2[0]=='2'||flag)
			{
				ans=max(ans,len*2);
			}
		}
		if(len>=2&&a2[0]=='1'&&a2[1]=='2')
		{
			ans=max(ans,len+(len-1)*2);
		}
		ans=max(ans,sum);
		printf("%d\n",ans);
	}
	else 
	{
		int ans1=0;
		for(int i=0;i<len;i++) ans1+=a2[i]-'0';
		ans1+=len;
		
		int wi=0;
		for(int i=0;i<len;i++)
		{
			if(a2[i]>a1[i])
			{
				wi=i;
				break;		
			}
		}
		a2[wi]-=1;
		for(int i=wi+1;i<len;i++)
		{
			a2[i]='2';
		}
		for(int i=0;i<len;i++)
		{
			ans+=a2[i]-'0';
		}
		ans+=len;
		printf("%d\n",max(ans1,ans));
	}
}
int main()
{
	int t;
	cin >> t;
	for(int i=1;i<=t;i++) solve();	
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3532kb

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: 4ms
memory: 3568kb

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:

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