QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#184469#5117. Find Maximumzwp1234WA 0ms5656kbC++173.3kb2023-09-20 19:48:272023-09-20 19:48:28

Judging History

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

  • [2023-09-20 19:48:28]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:5656kb
  • [2023-09-20 19:48:27]
  • 提交

answer

//# pragma GCC optimize(2)
#include <bits/stdc++.h>
#define int long long
#define SZ(x) (int)(x).size()
#define fs first
#define sc second
#define PII pair<int,int>
#define ls(u) (u)<<1
#define rs(u) (u)<<1|1
#define pb push_back
#define eb emplace_back
#define vi vector<int>
#define vvi vector<vi >
#define vI vector<PII>
#define db double
#define all(a) (a).begin(),(a).end()
#define die cout << "???" << endl
//#define endl '\n'
using namespace std;
const int mod = 998244353;
//const int mod = 1169996969;
//const int mod = 1e9+7;
//const int inf = LLONG_MAX;
const int inf = 0x3f3f3f3f;
//const int inf = 1e9;
//const db PI = acos(-1.0);
const db eps = 1e-5;
typedef long long ll;
typedef unsigned long long  ull;
const int N = 1e5+5,M = 3e5+5,K = 30;

inline int rd() {
    int f = 0; int x = 0; char ch = getchar();
    for (; !isdigit(ch); ch = getchar()) f |= (ch == '-');
    for (; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0';
    if (f) x = -x;
    return x;
}

void write(int a) {if(a>=10)write(a/10);putchar(a%10+'0');}
void wt(int a) {if(a < 0) {putchar('-');a = -a;}write(a);}
void wwt(int a){wt(a);putchar('\n');}

// void write(ll a) {if(a>=10)write(a/10);putchar(a%10+'0');}
// void wt(ll a) {if(a < 0) {putchar('-');a = -a;}write(a);}
// void wwt(ll a){wt(a);putchar('\n');}

int lowbit(int x) {return (x&(-x));}
int n,m,k;

bool cmp(string a,string b)
{
    return SZ(a) < SZ(b);
}

int cnt[N];

int a[N],b[N];

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    #ifndef ONLINE_JUDGE
    freopen("in.txt", "r+", stdin);
    freopen("out.txt", "w+", stdout);
    #endif
    
    int _;
    for(cin >> _;_;_--)
    {
        int l,r;
        cin >> l >> r;

        int ans = 0;

        int tmp = 0;

        int t = r;

        while(t)
        {
            tmp += t%3 + 1;
            t/=3;
        }

        ans = max(ans,tmp);

        int cnt1 = 0;

        while(r)
        {
            a[cnt1++] = r%3;
            r/=3;
        }

        int cnt2 = 0;

        while(l)
        {
            b[cnt2++] = l%3;
            l/=3;
        }

        if(cnt1 > cnt2 || (cnt1 == cnt2 && a[cnt1 - 1] > b[cnt2 - 1]))
        {
            if(cnt1 >= 2 && a[cnt1 - 2] != 0)
            {
                tmp = cnt1 + a[cnt1 - 2] - 1 + a[cnt1 - 1] + 2*(cnt1 - 2);
            }

            else 
            {
                tmp = 2*(cnt1 - 1) + a[cnt1-1] - 1;
                if(a[cnt1 - 1] == 2)
                {
                    tmp += cnt1;
                }

                else 
                {
                    tmp += cnt1 - 1;
                }
            }

            ans = max(ans,tmp);
        }

        else 
        {
            int id = -1;
            int s = 0;
            for(int i = cnt1-1;~i;i--)
            {
                if(a[i] != b[i])
                {
                    id = i;
                    break;
                }
                s += a[i];
            }

            if(id != -1)
            {
                tmp = s + cnt1 + a[id] - 1 + id*2;
                ans = max(ans,tmp);
            }
        }

        cout << ans << endl;

    }
    
    
    return 0;

}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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

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
7
7
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
10
10
10
10
10
10
10
10
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
7
7
8...

result:

wrong answer 21st numbers differ - expected: '8', found: '7'