QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#65163#5117. Find MaximumJWChen#WA 4ms3472kbC++143.6kb2022-11-27 21:25:172022-11-27 21:25:18

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 21:25:18]
  • 评测
  • 测评结果:WA
  • 用时:4ms
  • 内存:3472kb
  • [2022-11-27 21:25:17]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int T;
ll l,r,a[101],b[101],sa,sb,ans;
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld%lld",&l,&r);
        ll tmp;
        sa=0;
        sb=0;
        ans=0;
        tmp=l;
        while(tmp)
        {
            sa++;
            a[sa]=tmp%3;
            tmp/=3;
        }
        tmp=r;
        while(tmp)
        {
            sb++;
            b[sb]=tmp%3;
            tmp/=3;
        }
    //    printf("sa=%lld sb=%lld\n",sa,sb);
        if(sa==sb)//sa<=sb
        {
            ans=sa;
            ll wz=-1,tmpa;
            for(int i=sa;i>=1;--i)
                if(a[i]!=b[i])
                {
                    wz=i;
                    break;
                }
                else ans+=a[i];
            //l<=r a[wz]<b[wz]
            if(b[wz]==2) 
            {
                bool f=true;
                for(int i=wz;i>=1;--i)
                    if(b[i]!=2)
                    {
                        f=false;
                        break;
                    }
                if(f) tmpa=(wz-1)*2+2;
                else tmpa=(wz-1)*2+1;
            }
            else if(b[wz]==1)
            {
                bool f=true;
                for(int i=wz-1;i>=1;--i)
                    if(b[i]!=2)
                    {
                        f=false;
                        break;
                    }
                if(f) tmpa=(wz-1)*2+1;
                else tmpa=(wz-1)*2+0;
            }
            ans+=tmpa;
        }
        else if(sa<sb)
        {
            ll tmpa,tmpaa,wz;
            tmpa=0;
            tmpaa=sb;
            for(int i=sb;i>=1;i--)
                if(b[i]!=2)
                {
                    wz=i;
                    break;
                }
            if(wz!=sb) 
            {
                tmpaa+=wz*2+1+(sb-wz-1)*2;
            //    printf("wz=%lld tmpaa=%lld\n",wz,tmpaa);
            }
            else//最高位是1
            {
                tmpaa+=b[sb];
                wz=-1;
                for(int i=sb-1;i>=1;i--)
                    if(b[i]!=0)
                    {
                        wz=i;
                        break;
                    }
                if(wz!=-1)
                {
                    if(b[wz]==1)
                    {
                        bool f=true;
                        for(int i=wz-1;i>=1;--i)
                            if(b[i]!=2)
                            {
                                f=false;
                                break;
                            }
                        if(f) tmpaa+=1+2*(wz-1);
                        else tmpaa+=0+2*(wz-1);
                    }
                    else if(b[wz]==2)
                    {
                        bool f=true;
                        for(int i=wz-1;i>=1;--i)
                            if(b[i]!=2)
                            {
                                f=false;
                                break;
                            }
                        if(f) tmpaa+=2+2*(wz-1);
                        else tmpaa+=1+2*(wz-1);
                    }
                } 
            }
            tmpa=max(tmpa,tmpaa);
            tmpaa=sa+sa*2;
        //    printf("tmpaa=%lld\n",tmpaa);
            tmpa=max(tmpa,tmpaa);
            if(sa<sb-1)
            {
                tmpaa=sb-1+2*(sb-1);    
                tmpa=max(tmpa,tmpaa);
            }
            ans=tmpa;
        }
        printf("%lld\n",ans);
    }
}

详细

Test #1:

score: 100
Accepted
time: 3ms
memory: 3452kb

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

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:

93988576029759
3
3
4
5
5
5
5
6
6
6
6
6
7
7
7
8
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
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
11
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
12
5
3
4
5
5
5
5
6
6
6
6
6
7
7
7
...

result:

wrong answer 1st numbers differ - expected: '2', found: '93988576029759'