QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#393267#5117. Find MaximumTolretWA 0ms3672kbC++201.8kb2024-04-18 13:49:012024-04-18 13:49:01

Judging History

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

  • [2024-04-18 13:49:01]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3672kb
  • [2024-04-18 13:49:01]
  • 提交

answer

#include<bits/stdc++.h>
#define int long long int
#define inf
#define pb push_back
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;
const int maxn=1e6+5;
int tt=1;
int arr1[64],arr2[64];
int quick(int x,int y)
{
    int yy=1;
    while(y)
    {
        if(y&1)
        yy=yy*x;

        y>>=1;
        x=x*x;
    }
    return yy;
}
void chan(int *a,int val)
{
    int wei=63;
    while(val)
    {
        a[wei]=val%3;
        val/=3;wei--;
    }
}
void solve()
{
    int l,r;cin>>l>>r;
    for(int i=0;i<=63;i++)
    {
        arr1[i]=arr2[i]=0;
    }
    chan(arr1,l);chan(arr2,r);
    int maxwei=63;
    for(int i=0;i<=63;i++)
    {
        if(arr2[i])
        {
            maxwei=i;break;
        }
    }
    int val=0;
    int ans=0,cnt=1;
    for(int i=maxwei;i<=63;i++)
    {
        int e=val;
        if(arr2[i]==0)continue;
        e+=quick(3,63-maxwei)*(arr2[i]-1);
        int u=cnt+arr2[i]-1;
        for(int j=i+1;j<=63;j++)
        {
            e+=quick(3,63-j)*(2);u+=2;
        }
        if(i==maxwei)
        {
            if(arr2[i]-1)
            {
                u+=63-maxwei;
            }
            else
            {
                u+=max((int)0,63-maxwei-1);
            }
            cnt+=63-maxwei;
        }
        if(e>=l)
            ans=max(ans,u);
        val+=quick(3,63-maxwei)*arr2[i];cnt+=arr2[i];
    }
    ans=max(ans,cnt);
    cout<<ans<<'\n';
//    for(int i=maxwei;i<=63;i++)
//    {
//        cout<<arr1[i]<<' ';
//    }
//    cout<<'\n';
//    for(int i=maxwei;i<=63;i++)
//    {
//        cout<<arr2[i]<<' ';
//    }
//    cout<<'\n';
 }
signed main()
{
	ios::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    cin>>tt;
    for(int i=1;i<=tt;i++)
    solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 0ms
memory: 3672kb

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 1310th numbers differ - expected: '6', found: '7'