Duyên Hải 2020 - Lớp 10 - Bài 1 - LED

Xem dạng PDF

Gửi bài giải


Điểm: 0,10 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M
Input: stdin
Output: stdout

Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Minh nhận được một chiếc máy tính bấm tay màn hình LCD. Màn hình được chia thành các ô biểu diễn chữ số, mỗi ô gồm ~7~ vạch LED và mỗi chữ số sẽ tương ứng với một số vạch LED được kích hoạt nổi màu đen trên ô đó. Cách hiển thị các số như sau:

Minh bấm số nguyên dương ~N~ hiển thị trên màn hình và thắc mắc ~2~ câu hỏi:

  1. Có bao nhiêu vạch LED được kích hoạt để hiển thị số ~N~.
  2. Tính số lượng các số lớn hơn ~N~, có thể được hiển thị bởi kích hoạt thêm ít nhất một vạch LED ngoài các vạch đang được kích hoạt để hiển thị số ~N~ (không tắt bất kỳ vạch LED nào đang hiển thị và không kích hoạt vạch LED trên ô chưa có vạch kích hoạt).

Yêu cầu: Hãy lập trình giúp Minh trả lời ~2~ câu hỏi trên.

Input

Dữ liệu vào:

  • Dòng đầu tiên ghi mã câu hỏi ~V~ là ~1~ hoặc ~2~.
  • Dòng thứ ~2~ ghi số nguyên dương ~N~ (không bắt đầu bởi chữ số ~0)~.

Output

Ghi ra:

  • Nếu ~V = 1~ thì in ra số vạch LED được kích hoạt để hiển thị số ~N~.
  • Nếu ~V = 2~ thì in ra số lượng số lớn hơn ~N~, có thể được hình thành bằng cách kích hoạt thêm ít nhất một vạch LED, bên cạnh các vạch đã kích hoạt được sử dụng để hiển thị số ~N~.

Giới hạn

  1. ~(45~ điểm~)~ ~V = 1~, ~N \leq 10^{18}~
  2. ~(20~ điểm~)~ ~V = 2~, ~N < 20~
  3. ~(35~ điểm~)~ ~V = 2~, ~20 \leq N \leq 10^{18}~

Sample Input 1

1
823

Sample Output 1

17

Sample Input 2

2
823

Sample Output 2

5

Note

Ở test ví dụ 1: số ~8~ dùng ~7~ vạch, số ~2~ dùng ~5~ vạch, số ~3~ dùng ~5~ vạch, do đó cần ~17~ vạch.

Ở test ví dụ 2: có ~5~ số lớn hơn ~823~ là ~828~, ~829~, ~883~, ~888~, ~889~.


Bình luận

Hãy đọc nội quy trước khi bình luận.



  • 0
    manhvuvanyeuha  đã bình luận lúc 14, Tháng 2, 2025, 16:32
    #include <bits/stdc++.h>
    
    using namespace std ; 
    #define ll long long 
    ll v , n ;
    string s ;
    ll dp[10] = {6 , 2 , 5 , 5 , 4, 5, 6 , 3 ,7 , 6} ; 
    ll f[10] = {1 , 5 , 1, 2 , 2 , 3 , 1 , 2 , 0 , 0} , cnt[20] ,cnt2[20] ,  friu[10] = {1 , 6 , 1 , 2 , 2 , 3, 1 , 4 , 0 , 1} ; 
    void sub1()
    {
        cin >> s ; 
        ll ans = 0 ; 
        for(int i = 0 ; i < s.size() ; i++) ans += dp[s[i] - '0'] ; 
        cout << ans ; 
    }
    
    void sub3()
    {
        string str = to_string(n) ; 
        for(ll i = str.size() - 1 ; i >= 0 ; i--)
        {
            cnt[i] = f[str[i] - '0'] ; 
            cnt2[i] = friu[str[i] - '0'] ; 
        }
        ll ans = 0 , vm = 1 ; 
        for(ll i = str.size() - 1 ; i >= 0 ; i--)
        {
        ll res = vm ; 
        vm = vm *(cnt2[i] + 1) ; 
        cnt[i] *= res ;
        ans += cnt[i] ; 
        }
        cout << ans ; 
    
    }
    int main()
    {   
        cin >> v  ; 
        if(v == 1)
        {
            sub1() ;
        }
        else 
        {
        cin >> n ; 
        sub3() ; 
        }
    }
    

    mình xin góp 1 sol của mình :v , ko cần qhđ heheeee


  • -10
    minhduc1th2  đã bình luận lúc 19, Tháng 8, 2024, 17:47

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -48
    pmdong  đã bình luận lúc 19, Tháng 8, 2021, 12:34

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -48
    NEIK  đã bình luận lúc 4, Tháng 5, 2021, 10:13 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.