P153PROG PTIT spoj – ROUND 3G – Chẵn lẻ
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P153PROG/ 1. Đề bài P153PROG PTIT spoj Tí đang ngồi học toán nhưng thấy chán quá nên ngồi viết ra các số tự nhiên từ 1 tới n và để tăng phần thú vị, đầu tiên, Tí viết các số lẻ trong n số theo thứ tự tăng dần từ trái qua phải ra ...
Nguồn đề bài: http://www.spoj.com/PTIT/problems/P153PROG/
1. Đề bài P153PROG PTIT spoj
Tí đang ngồi học toán nhưng thấy chán quá nên ngồi viết ra các số tự nhiên từ 1 tới n và để tăng phần thú vị, đầu tiên, Tí viết các số lẻ trong n số theo thứ tự tăng dần từ trái qua phải ra trước rồi viết tất cả các số chẵn cũng theo thứ tự tăng dần ra sau.
Sau đó Tí đố tèo biết được giá trị của số thứ k trong dãy số mà Tí vừa viết. Tèo bí quá đành nhờ các bạn giúp vậy.
Input
Một dòng duy nhất chứa 2 số nguyên n và k (1 <= k <= n <= 10^12).
Output
Giá trị của số thứ k.
Example
Test 1:
Input:
10 3
Output:
5
Test 2:
Input:
7 7
Output:
6
2. Hướng dẫn P153PROG PTIT spoj
– đếm số lượng số chẳn và số lượng số lẻ trong đoạn [1..n].
– dễ dàng tìm được trường hợp sau:
nếu K>số lượng số lẻ thì kết quả sẽ là một số chẳn và số đó là ” |số lượng số lẻ – K|*2 “.
trường hợp ngược lại thì kết quả sẽ là một số lẻ, dễ dàng tìm được công thức “ k*2 – 1 ”
3. code tham khảo P153PROG PTIT spoj
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | const fi='; var f:text; K,N,slchan,slle:int64; begin assign(f,fi); reset(f); readln(f,n,k); close(f); if n mod 2=0 then begin slle:=n div 2; slchan:=n div 2; end else begin slle:=n div 2 +1; slchan:=n div 2; end; if k>slle then writeln(abs(slle-k)*2) else writeln(k*2-1); end. |