Ôn luyện vào chuyên Tin #02

Ôn luyện vào LQĐ #02

💻 Bạn có ước hẹn với crush cùng nhau nắm tay vào Lê Quý Đôn?

💻 Bạn muốn trúng tuyển lớp chuyên Tin nhưng chưa hình dung được đề bài thi môn chuyên cũng như tự đánh giá được sức học hiện tại của mình?

💻 Bạn muốn có những người thầy tốt, bạn giỏi để định hướng, kèm cặp cho bạn rèn luyện các kĩ năng lập trình cần thiết?

Hãy đến với contest Ôn luyện vào LQĐ hàng tuần với sự góp mặt của các cựu chuyên tin LQĐ tài năng và đáng yêu. Những bộ đề được biên soạn kĩ lưỡng hứa hẹn sẽ mang đến cho bạn cái nhìn tổng quan về năng lực của mình trước kì tuyển sinh LQĐ cam go sắp tới.

👉 Contest được diễn ra vào thứ 2 hàng tuần vào lúc 19:00, kéo dài 120 phút với số lượng bài dao động từ 3-4 bài.

👉 Contest lần #02 này cho anh thoi_bay_corona làm đề!

Kỳ thi có tính Rated cho các bạn có điểm xếp hạng từ 1799 trở xuống.

Các quý thầy cô và các bạn có thể nhận xét và yêu cầu mức độ về đề cho phù hợp hơn với tỉnh/thành của mình


Bài tập

Bài tập Điểm Tỷ lệ AC Người nộp
Tam giác không cân 100p 22,7% 2752 Hướng dẫn
Bài tập về nhà 1600p 14,0% 139
Perfect !! 900p 38,9% 1541
Baroibeo Number 400p 29,4% 138 Hướng dẫn



Bình luận


  • 0
    SPyofgame    9:04 p.m. 8 Tháng 6, 2020 chỉnh sửa 15

    Spoiler Alert


    Editorial bài 1

    Hint 1

    Tìm điều kiện tam giác và loại bỏ điều kiện để nó cân, từ đó suy ra kết quả

    Hint 2

    Điều kiện độ dài các cạnh: (a > 0) && (b > 0) && (c > 0)

    Điều kiện để tạo tam giác: (a + b > c) && (b + c > a) && (c + a > b)

    Điều kiện để tam giác cân: (a == b) || (b == c) || (c == a)

    Hint 3

    Điều kiện tam giác không cân: ((a > 0) && (b > 0) && (c > 0)) && ((a + b > c) && (b + c > a) && (c + a > b)) && !((a == b) || (b == c) || (c == a))


    Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

    C++
    int main()
    {
        ll a, b, c;
        cin >> a >> b >> c;
        bool ok1 = (a > 0) && (b > 0) && (c > 0);
        bool ok2 = (a + b > c) && (b + c > a) && (c + a > b);
        bool ok3 = (a == b) || (b == c) || (c == a);
        cout << ((ok1 && ok2 && !ok3) ? "YES" : "NO");
        return 0;
    }
    

    Hint 4

    Bạn cũng có thể sắp xếp các cạnh để có công thức toán học gọn hơn


    Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

    C++
    ll max(ll a, ll b)       { return a > b ? a : b; }
    ll min(ll a, ll b)       { return a < b ? a : b; }
    ll med(ll a, ll b, ll c) { return max(min(a, b), min(c, max(a, b))); }
    int main()
    {
        ll a, b, c;
        cin >> a >> b >> c;
        tie(a , b , c) = make_tuple(  max(a, max(b, c))  ,  med(a, b, c)  ,  min(a, min(b, c))  );
        cout << ((a > b && b > c && c > 0 && b + c > a) ? "YES" : "NO");
        return 0;
    }
    

    Reference AC code | \(O(1)\) time | \(O(1)\) auxiliary space | Math

    C++
    int main()
    {
        ll a, b, c;
        cin >> a >> b >> c;
        if (a < b) swap(a, b); if (a < c) swap(a, c); if (b < c) swap(b, c); /// sort 3 so
        cout << ((a > b && b > c && c > 0 && b + c > a) ? "YES" : "NO");
        return 0;
    }
    





    Editorial bài 2

    Hint 1

    Tiền xử lí O(n log n) cho mảng f[x] là tổng các ước của x

    Với mỗi số i, ta tăng giá trị bội của i lên i đơn vị. Hay f[i * k] += f[i]

    Hint 2

    Cố lên, mình tin bạn làm được 😉






    Editorial bài 3:


    Hint 1

    Đề yêu cầu kiểm tra nếu tất cả xâu đối xứng đều có độ dài lẻ thì in ra YES

    Mình chỉ cần kiểm tra trong xâu có xâu đối xứng độ dài chẵn thì in ra NO


    Hint 2

    Xâu con đối xứng nhỏ nhất có độ dài chẵn có dạng aa với a là 2 kí tự bất kì

    Mình chỉ cần kiểm tra trong xâu nếu tồn tại 2 kí tự kề nhau bằng nhau thì in ra NO


    Reference AC code | O(n) time | O(1) auxiliary space | string

    C++
    int main() {
        string s;
        cin >> s;
    
        for (int i = 0; i + 1 < s.size(); ++i)
            if (s[i] == s[i + 1])
                return cout << "NO", 0;
    
        return cout << "YES", 0;
    }
    

    Hint 3

    Ta có thể không cần lưu mảng string


    Reference AC code | O(1) auxiliary time | O(1) auxiliary space | string, online solving

    C++
    inline bool isLowerLatin(char c) { return 'a' <= c && c <= 'z'; }
    int main()
    {
        for (char pre = getchar(), cur; isLowerLatin(cur = getchar()); pre = cur)
            if (pre == cur) return cout << "NO", 0;
    
        return cout << "YES", 0;
    }
    





    Editorial 4

    Hint 1

    Quy hoạch động chữ số

    Hint 2

    Gọi f(x) là số số thỏa mãn bé hơn x

    result = f(r) - f(l - 1)


    • 7
      mbfibat    9:46 p.m. 8 Tháng 6, 2020 chỉnh sửa 2

      Bài 2: https://cses.fi/problemset/task/1082

      Các số từ 1 đến sqrt(n) giải như sub 1.

      Các số từ floor(n / (i + 1)) + 1 đến floor(n / i) sẽ được dùng chính xác i lần, nên có thể tính được số lần dùng của các số từ sqrt(n + 1) đến n.

      4 bình luận nữa