VRATF - Những con đường quanh nông trang

Tags: math, brute-force, implementation

Problem

https://vn.spoj.com/problems/VRATF

https://oj.vnoi.info/problem/VRATF

Các con bò của nông dân John có sở thích là hay đi khám phá những vùng xung quanh nông trang. Ban đầu, tất cả N (1 <= N <= 1,000,000,000) con bò tập trung thành 1 nhóm và cùng bắt đầu chuyến đi trên 1 con đường. Cho tới khi gặp một ngã ba đường thì chúng đôi khi chọn cách chia làm 2 nhóm nhỏ hơn (mỗi nhóm ít nhất 1 bò) và mỗi nhóm lại tiếp tục hành trình trên con đường của nhóm chúng. Khi một trong những nhóm này gặp 1 ngã ba khác thì nhóm này lại có thể tách ra tiếp, và cứ như vậy.

Các con bò đã hình thành nên 1 quy tắc về việc chia nhóm như sau: nếu chúng có thể chia thành 2 nhóm mà chênh lệch số bò của 2 nhóm là đúng bằng K (1 <= K <= 1000) thì tại ngã ba đó chúng sẽ chia làm 2; nếu không thì chúng sẽ dừng cuộc hành trình và đứng ở đó nhấm nháp cỏ non.

Giả sử rằng luôn có những ngã ba mới trên các con đường, hãy tính xem cuối cùng có bao nhiêu nhóm bò tất cả.

Dữ liệu

Một dòng chứa 2 số nguyên cách nhau bởi dấu cách: NK

Kết quả

Một dòng chứa số nguyên cho biết số lượng nhóm bò sau cùng.

Ví dụ

Input
6 2

Output
3

Giải thích:
Có 6 con bò và độ chênh lệch khi xét chia nhóm là 2.
Cuối cùng có 3 nhóm bò (1 nhóm có 2 bò, 1 nhóm có 1 và 1 nhóm có 3 ).

   6
  / \\
 2   4
    / \\
   1   3

Tutorial

Giả sử nhóm đang có n phần tử thì cần chia thành hai nhóm gồm ab phần tử thỏa a+b = n && a-b = k => 2a = n+k && 2b = n-ka > b > 0 => n > k.

Do đó dùng đệ quy tính từng cặp trạng thái đến khi không tính được nữa.


Submission

VRATF.cpp