Đoán số

View as PDF

Submit solution

Points: 100.00 (partial)
Time limit: 1.0s
Memory limit: 64M
Input: stdin
Output: stdout

Author:
Suggester:
Problem type
Allowed languages
C++, Pascal, PyPy, Python

Đây là bài toán giao tiếp với máy chấm (Interactive problem)

Thuận có một con số ~n~ bí mật. Điều duy nhất bạn biết về con số này là ~1 \leq n \leq 2 \times 10^9~. Thuận và bạn sẽ chơi một trò chơi như sau: Bạn sẽ được chọn một số bất kỳ và nói cho Thuận nghe số đó. Thuận sẽ cho bạn biết con số của bạn lớn hơn, nhỏ hơn, hay bằng ~n~. Hãy đoán xem ~n~ là số nào trong không quá ~31~ câu hỏi.

Cách Thức Giao Tiếp

Mỗi lượt, bạn sẽ in ra một số ~x~ trên một dòng (~1\leq x \leq 2 \times 10^9~). Máy tính sẽ đọc ~x~ và in ra màn hình một chuỗi tương ứng với các trường hợp sau:

  • "BIGGER" nếu ~n > x~
  • "SMALLER" nếu ~n < x~
  • "HOLA" nếu ~n = x~.

Lưu ý:

  • Chuỗi mà máy in ra màn hình không có dấu "
  • Nếu các bạn in ra một output không hợp lệ (không phải là một số, số ngoài đoạn ~[1, 2 \times 10^9]~ thì nhiều khả năng bị TLE.
  • Sau khi in mỗi số, bạn phải xuống dòng (ví dụ in endl trong C++)
  • Khi in ra một dòng, các bạn phải flush output bằng cách cout.flush hoặc dùng endl thay vì \n
Example

Con số bí mật trong test này là 5.

Input Output Giải thích
1 Bạn đoán số 1
SMALLER Số 1 nhỏ hơn đáp án
9 Bạn đoán số 9
BIGGER Số 9 lớn hơn đáp án
5 Bạn đoán số 5
HOLA Hola! Bạn đã đoán đúng mà chỉ dùng 3 câu hỏi!

Comments

Please read the guidelines before commenting.



  • 0
    25A-463   commented on April 16, 2025, 5:12 p.m.

    trai = 1 phai = 2000000000

    while trai <= phai: doan = (trai + phai) // 2 print(doan, flush=True)

    tra_loi = input()
    
    if tra_loi == "HOLA":
        break
    elif tra_loi == "BIGGER":
        trai = doan + 1
    elif tra_loi == "SMALLER":
        phai = doan - 1
    

  • 0
    nhatnam2   commented on April 15, 2025, 8:13 p.m.

    chết mai thi (16/4/2025) mà trúng bài này là chết


  • 2
    KVMB23A_67   commented on April 15, 2025, 3:37 p.m. edited

    code PY:

    if __name__=='__main__':
        l, r=1, 2*10**9
        while l<=r:
            m=(l+r)//2
            print(m)
            inp=input()
            if inp=='HOLA': break
            elif inp=='BIGGER': l=m+1
            else: r=m-1
    

    code C++:

    #include<bits/stdc++.h>
    #define str string
    #define ll long long
    using namespace std;
    
    int main(){
        ll l=1, r=2e9;
        while (true){
            ll m=(l+r)/2;
            cout<&lt;m<<endl;
            str inp; cin>>inp;
            if(inp=="HOLA")return 0;
            else if(inp=="SMALLER")r=m-1;
            else l=m+1;
        }
        return 0;
    }
    

  • -1
    khailuongphong   commented on April 14, 2025, 9:19 p.m. edit 3

    Hò khét . khó quáááááááá


  • -1
    quan5a5   commented on April 14, 2025, 8:37 p.m.

    mai thi


  • -1
    phambahuy5ddl   commented on April 14, 2025, 9:48 a.m.

    scratch làm sao làm đc


  • -1
    phambahuy5ddl   commented on April 14, 2025, 9:45 a.m.

    alo


  • -1
    vietdz123   commented on April 14, 2025, 8:32 a.m.

    bài này sao giải bắng scratch v


  • -1
    DRMacc2Bandang   commented on April 13, 2025, 9:09 a.m. edited

    tỉ lệ đoán đúng là 10 ^ 9 chia 2 "30 lần" Ai nói cho tôi code này sao ac 1 test v? bg = 2000000000 sm = 1 step = "BIGGER" while True: if step = "BIGGER": bg = int(bg / 2 // 1) if step = "SMALLER": bg = int(bg * 1.5 // 1) print(bg) m = str(input()) if m == "HOLA": break elif m == "SMALLER": step = "SMALLER" else: step = "BIGGER"


  • -1
    hanghai8891   commented on April 12, 2025, 9:21 p.m.

    Tỷ lệ đoán đúng là 1/2000000000 mà được đoán có 30 lần thì làm sao mà đoán được


  • -1
    nguyentrungnguyen5ddl   commented on April 11, 2025, 5:15 p.m.

    tui ko b


  • -2
    quan5a5   commented on April 11, 2025, 7:38 a.m.

    NAH,I WIN


  • -2
    minhtruong26   commented on April 10, 2025, 5:26 p.m.

    ai biết lệnh nào trong python giống khối repeat until trong scratch không


    • -1
      thyhnc   commented on April 16, 2025, 8:23 p.m. edited

      while á bạn

      cú pháp:

      while condition: statements [break]


      • 0
        minhtruong26   commented on April 19, 2025, 6:54 p.m.

        cảm ơn bạn👍🏻🙏🏻


  • -1
    khanhs_2k14   commented on April 5, 2025, 10:06 a.m.

    bài này dễ nhưng... tỷ lệ là 1/2000000000 mà chỉ cho 30 câu thì đoán kiểu j


  • -2
    25A-357   commented on April 5, 2025, 8:48 a.m.

    dễ mà: giải: l = 1 h = 2 * 10**9

    while l <= h: m = (l + h) // 2 print(m, flush=True)

    f = input().strip()
    
    if f == "BIGGER":
        l = m + 1
    elif f == "SMALLER":
        h = m - 1
    elif f == "HOLA":
        break
    

    python 3


    • -1
      minhtruong26   commented on April 10, 2025, 5:38 p.m. edited

      sai rồi bạn, kiểm tra trước đi rồi mới đăng😅


      • -1
        KVMB23A_67   commented on April 10, 2025, 9:33 p.m.

        sai chỗ nào v


        • -1
          minhtruong26   commented on April 11, 2025, 3:28 p.m. edited

          đăng ảnh kiểu gì chỉ mình, mình tải lỗi cho🤔


          • -1
            KVMB23A_67   commented on April 13, 2025, 10:01 a.m.

            dùng lời nói đi bro


            • -1
              minhtruong26   commented on April 14, 2025, 8:55 p.m.

              Biên dịch gặp lỗi guessgamecpp.cpp:1:1: error: ‘f’ does not name a type 1 | f = input().strip() | ^


            • -1
              minhtruong26   commented on April 14, 2025, 8:52 p.m.

              bạn vote mình -1 à


            • -1
              minhtruong26   commented on April 14, 2025, 8:50 p.m.

              Test case #1: Lỗi khi chạy chương trình (IR) (NameError) [0,061s, 5.82 MB] (0/1) Test case #2: Lỗi khi chạy chương trình (IR) (NameError) [0,079s, 5.78 MB] (0/1) Test case #3: Lỗi khi chạy chương trình (IR) (NameError) [0,020s, 5.95 MB] (0/1) Test case #4: Lỗi khi chạy chương trình (IR) (NameError) [0,054s, 5.92 MB] (0/1) Test case #5: Lỗi khi chạy chương trình (IR) (NameError) [0,038s, 5.84 MB] (0/1)


  • 0
    lovevsick   commented on March 28, 2025, 7:28 p.m.

    bài này tịt luôn, chju thật..


  • 1
    doandulamtin   commented on March 26, 2025, 8:43 p.m.

    bài này dùng hàm random :)) (100% ko hiểu quả)


    • 0
      nguyenminhtri_2014   commented on March 30, 2025, 7:55 a.m. edit 2

      a=randit.random(1,10)

      print(a)

      thử đi


      • -1
        25B-372   commented on April 2, 2025, 10:38 p.m.

        tôi bị Invalid Return nha =((


  • -1
    khang_5c   commented on March 23, 2025, 8:40 a.m.

    LỜI GIẢI FRSKRT


  • 1
    NAN24B_32   commented on Feb. 18, 2025, 9:31 p.m.

    ai giải thích hộ tôi với, tôi ko hiểu nổi cái đề


    • 0
      nguyenminhtri_2014   commented on March 31, 2025, 10:07 p.m.

      Là máy chọn một số ngẫu nhiên từ 1 đến 2000000000=(a). Cho nhập vào từng số, nếu số đó lớn hơn (a) thì nói 'BIGGER', nếu nhỏ hơn a thì nói 'SMALLER', nếu bằng a thì noi 'HOLA'


  • 2
    tinhoctredtsd   commented on Feb. 12, 2025, 2:55 p.m.

    def Bi(a,b): x=int((a+b)//2) print(x) i=input() if i=="BIGGER": Bi(x,b) elif i=="SMALLER": Bi(a,x) Bi(1,2000000000)


  • -1
    sb20240044   commented on Jan. 21, 2025, 6:54 a.m.

    Tôi bị TLE TToTT


  • -1
    sb20240044   commented on Jan. 21, 2025, 6:44 a.m.

    bài này dễ... nhưng tại sao các bạn cứ dùng C++?!!!!!


    • 1
      KVMB23A_67   commented on Feb. 25, 2025, 7:03 p.m.

      chủ yếu là do thuật thôi, bài này dùng c++ mà thuật yếu thì cũng vậy mà


      • 1
        sb20240044   commented on Feb. 26, 2025, 8:12 p.m.

        Xin lỗi nhưng mình không giỏi C++ mà giỏi python 😵


  • -1
    KVMB23A_67   commented on Dec. 29, 2024, 7:24 p.m.

    bài này dùng binary search


  • 3
    NguyenHPhong   commented on Dec. 21, 2024, 11:16 p.m. edited

    hello


  • -25
    truongphat   commented on Nov. 28, 2024, 7:31 p.m.

    This comment is hidden due to too much negative feedback. Show it anyway.