Cực trị theo tính chất đồng dư


Submit solution

Points: 1
Time limit: 1.0s
Memory limit: 977M

Author:
Problem type

Cho dãy số nguyên \(a_1, a_2,..., a_n\) hãy tìm giá trị nhỏ nhất và lớn nhất của những số chia cho 3 dư 0, chia cho 3 dư 1 và chia cho 3 dư 2.

Input

Dòng đầu chứa số nguyên dương n \((1<=n <=10^5)\)

Dòng tiếp theo có chứa n số nguyên có giá trị tuyệt đối không vượt quá \(10^4\)

Output

Ba dòng tương ứng với min và max của những số chia 3 dư 0, dư 1 và dư 2,

Trường hợp không có số nào chia 3 dư 0 xuất ra "Khong co so nao chia 3 du 0"

Trường hợp không có số nào chia 3 dư 1 xuất ra "Khong co so nao chia 3 du 1"

Trường hợp không có số nào chia 3 dư 2 xuất ra "Khong co so nao chia 3 du 2"

Ví dụ 1

Input

7
4 7 2 8 1 6 3

Output

3 6
1 7
2 8

Ví dụ 2

Input

7
-4 -7 -2 -8 -1 -6 -3

Output

-6 -3
-8 -2
-7 -1

Ví dụ 3

Input

3
3 6 9

Output

3 9
Khong co so nao chia 3 du 1
Khong co so nao chia 3 du 2
tichpx

Comments


  • -1
    HữuSáng_CNTT6_K61  commented on Nov. 18, 2021, 10:20 p.m. edited

    ...


  • 1
    hoanghai_CNTT6_K61  commented on Nov. 18, 2021, 12:11 p.m.

    mn xem giúp mình với :( chạy toàn RTE

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        long long n,max0,max1,max2,min0,min1,min2,d0=0,d1=0,d2=0,a[100];
        scanf("%lld",&n);
        for (int i=0 ; i<n ; i++)
        {
            scanf("%lld",&a[i]);
        }
        for (int i=0 ; i<n ; i++)
        {
            if (a[i]%3==0)
            {
    //          cout<<a[i]<<" "<<endl;
                d0++;
                max0=a[i];
                min0=a[i];
            }
            if (a[i]>0)
            {
                if (a[i]%3==1)
                {
    //              cout<<a[i]<<" ";
                    d1++;
                    max1=a[i];
                    min1=a[i];              
                }
                if (a[i]%3==2)
                {
    //              cout<<a[i]<<" "<<endl;
                    d2++;
                    max2=a[i];
                    min2=a[i];
                }
            }
            if (a[i]<0)
            {
                if (a[i]%3==-2)
                {
    //              cout<<a[i]<<" "<<endl;
                    d1++;
                    max1=a[i];
                    min1=a[i];
                }
                if (a[i]%3==-1)
                {
    //              cout<<a[i]<<" "<<endl;
                    d2++;
                    max2=a[i];
                    min2=a[i];              
                }
            }       
        }
        for (int i=0 ; i<n ; i++)
        {
            if (a[i]%3==0 && a[i]>max0) max0=a[i];
            if (a[i]%3==0 && a[i]<min0) min0=a[i];
            if (a[i]<0 && a[i]%3==-2 && a[i]>max1) max1=a[i];
            if (a[i]<0 && a[i]%3==-2 && a[i]<min1) min1=a[i];
            if (a[i]<0 && a[i]%3==-1 && a[i]>max2) max2=a[i];
            if (a[i]<0 && a[i]%3==-1 && a[i]<min2) min2=a[i];               
            if (a[i]>0 && a[i]%3==1 && a[i]>max1)   max1=a[i];
            if (a[i]>0 && a[i]%3==1 && a[i]<min1)   min1=a[i];
            if (a[i]>0 && a[i]%3==2 && a[i]>max2)   max2=a[i];
            if (a[i]>0 && a[i]%3==2 && a[i]<min2)   min2=a[i];
    
        }
        if (d0==0)  printf("Khong co so nao chia 3 du 0");
        else        printf("%lld %lld",min0,max0);
        if (d1==0)  printf("\nKhong co so nao chia 3 du 1");
        else        printf("\n%lld %lld",min1,max1);
        if (d2==0)  printf("\nKhong co so nao chia 3 du 2");
        else        printf("\n%lld %lld",min2,max2);
    }

    • 1
      LãoTam  commented on Nov. 18, 2021, 12:13 p.m.

      Tăng lên 100000 thay vì100 đi


      • 1
        hoanghai_CNTT6_K61  commented on Nov. 18, 2021, 12:17 p.m.

        vẫn không ổn


        • 2
          LãoTam  commented on Nov. 18, 2021, 12:20 p.m.

          Ô thay a[100] thành a[100000] là sẽ AC


  • 1
    TICHPX  commented on Nov. 7, 2019, 5:10 a.m.

    Chú ý -1 thì chia 3 dư 2 còn -2 thì chia 3 dư 1 nhé