Hiển thị kết quả từ 1 đến 7 / 7
  1. #1
    Tham gia
    16-06-2004
    Location
    Hà Nội
    Bài viết
    291
    Like
    0
    Thanked 0 Times in 0 Posts

    Một bài toán rất hay

    Có 1 băng giấy tròng trên đó ghi dãy các số 0 và 1. Có thể cắt băng giấy ở một vị trí bất kỳ để thu được 1 số gồm toàn các chữ số 0 và 1.

    Ví dụ: Với dãy số ở trên băng giấy là 010010110001100 nếu cắt ở vị trí sau số 1 cuối cùng từ trái sang ta thu được số 000100101100011.

    Yêu cầu: tìm vị trí cắt băng giấy để số thu được là nhỏ nhất.

    Dữ liệu: vào từ file văn bản 01NUMBER.INP gồm 1 dòng chứa dãy số 0,1 viét trên băng giấy (số lượng chữ số trên băng giấy không quá 30000).

    Kết quả: ghi ra file văn bản 01NUMBER.OUT vị trí cắt tìm được (các vị trí của các chữ số trên băng giấy được đánh số theo thứ tự xuất trong file dữ liệu, bắt đầu từ 1). Nếu có nhiều lời giải thì chỉ cần đưa ra 1 trong số chúng.

    Ví dụ: 01NUMBER.INP - 010010110001100 --> 01NUMBER.OUT - 13
    Quote Quote

  2. #2
    Tham gia
    29-08-2002
    Location
    TPHCM
    Bài viết
    149
    Like
    0
    Thanked 0 Times in 0 Posts
    Bài này giống bài Password trên VNOPSC nhỉ
    http://www.mg9h.5chau.com/contest/PASSWORD.DOC

    Cách đơn giản nhất là bạn nhân 2 cái dãy đó lên rồi duyệt thôi

  3. #3
    Tham gia
    16-06-2004
    Location
    Hà Nội
    Bài viết
    291
    Like
    0
    Thanked 0 Times in 0 Posts
    Mình vẫn chưa thực sự hiểu ý của bạn.
    Bạn có thể nói rõ hơn một chút được không?

  4. #4
    Tham gia
    10-02-2003
    Bài viết
    69
    Like
    0
    Thanked 0 Times in 0 Posts
    1. search phân đoạn có nhiều số 0 liên tiếp nhất, cắt ngay trước số 0 đầu tiên. Ở ví dụ của bạn
    Ví dụ: 01NUMBER.INP - 010010110001100 --> 01NUMBER.OUT - 13
    thì dãy số 0 liên tiếp dài nhất có 3 số 0 (in đậm).
    2. trường hợp có nhiều phân đoạn 0 dài nhất bằng nhau thì xét tiếp xem đoạn sau, trường hợp nào xuất hiện số 0 sớm nhất là trường hợp cần tìm. Vd.
    00010101***XX <--- cái này bé hơn nè
    00011011***XX

    không biết có hiểu sai ý bạn không chứ bài này... đâu có hay gì .
    Được sửa bởi consoilangthang lúc 21:59 ngày 25-06-2004

  5. #5
    Tham gia
    29-08-2002
    Location
    TPHCM
    Bài viết
    149
    Like
    0
    Thanked 0 Times in 0 Posts
    Nhân đôi dãy tức là
    S[length(S) + 1] = S[1]
    S[length(S) + 2] = S[2]
    ...

  6. #6
    Tham gia
    13-08-2002
    Bài viết
    762
    Like
    0
    Thanked 3 Times in 3 Posts
    "nhân đôi dãy" theo kiểu Junior@ hơi phí mem. Duyệt vòng bằng toán tử mod (%) là okie rồi.

  7. #7
    Tham gia
    16-06-2004
    Location
    Hà Nội
    Bài viết
    291
    Like
    0
    Thanked 0 Times in 0 Posts
    Hóa ra là thế đó, cám ơn các bạn thật nhiều nhé!

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •