Bedao Regular Contest 12 - BFRIDAY

Xem dạng PDF

Gửi bài giải


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

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

Nhân dịp Black Friday, lastPledge quyết định mua một món quà để tặng crush. Món quà là một dãy số ~a~ gồm ~n~ phần tử, tuy nhiên, vì đây là hàng sale off nên chất lượng không được tốt lắm. Vì vậy, lastPledge muốn tự tay chỉnh sửa lại món quà.

lastPledge sẽ thực hiện thao tác sau vô số lần. Ở lần thứ ~i~, anh ấy sẽ tăng giá trị của ~a_{p_i}~ thêm ~x_i~. Tuy nhiên, vì một số lý do kĩ thuật, ~x_i \ge x_{i - 1}~ với mọi ~i > 0~.

Một dãy số được gọi là dễ thương nếu bất kì dãy con liên tiếp độ dài ~k~ nào của nó đều có tổng chia hết cho ~2~. Vì không muốn thay đổi món quà ban đầu quá nhiều, lastPledge muốn thực hiện ít thao tác nhất có thể để dãy số ban đầu trở nên dễ thương.

Hãy giúp lastPledge chuẩn bị món quà dễ thương nhất để tặng cho crush nhé!

Input

Dòng đầu tiên gồm ~2~ số nguyên dương ~n~ - độ dài dãy ~a~ và ~k~ ~(k \leq n \leq 10^6)~.

Dòng thứ hai gồm ~n~ số nguyên ~a_1, a_2, \ldots, a_n~ thể hiện các phần tử của dãy ~a~ (~0 \le a_i \le 10^9~).

Output

Một dòng duy nhất chứa đáp án của bài toán: số lượng thao tác ít nhất để làm dãy ~a~ trở nên dễ thương.

Sample Input 1

5 3
1 10 1 2 9

Sample Output 1

2

Notes

Ở test ví dụ trên, ta có thể làm dãy ~a = [1, 10, 1, 2, 9]~ trở nên dễ thương trong ~2~ thao tác:

  • Ở lượt thứ 1: ta chọn ~p_1 = 4~ và ~x_1 = 3~. Lúc này, ~a = [1, 10, 1, 5, 9]~.
  • Ở lượt thứ 2: ta chọn ~p_2 = 5~ và ~x_2 = 7~. Lúc này, ~a = [1, 10, 1, 5, 16]~.

Sau ~2~ thao tác, tất cả các dãy con liên tiếp độ dài ~3~ đều có tổng chia hết cho ~2~.


Bình luận

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



  • 10
    nqk2k8btf001  đã bình luận lúc 24, Tháng 11, 2022, 5:29 sửa 15

    Em nghĩ là có một cách làm ko cần sử dụng đến quy hoạch động

    Nhận xét:

    Giả sử với k=3 ta có:

    (a1+a2+a3) mod 2 = (a2+a3+a4) mod 2

    Do đó a1 mod 2 = a4 mod 2 --> a4 mod 2 = a7 mod 2 ....

    Từ đó suy ra:

    +) Các số nằm ở vị trí đồng dư với n theo mod k (0 <= n < k) sẽ phải đồng dư theo mod 2

    --> Ta cần tìm cách thay đổi mỗi nhóm số (nhóm chia k dư từ 0 --> k-1) để chúng đồng dư theo mod 2 sao cho số lần thay đổi cần là ít nhất.


    Cách làm:

    Chạy một biến i từ 1 -> k là biểu thị cho mỗi nhóm

    Với mỗi giá trị a[i] dùng một biến j:

    while(j<=n)

    {

    ...

    j+=k;

    }

    Đếm số a[j] chẵn và lẻ

    Số lần đổi ít nhất của một nhóm là min(số a[j] chẵn, số a[j] lẻ)

    Code tham khảo

    for(i=1;i<=k;i++)

    {

    j=i;

    chan = 0; le = 0;

    while( j <= n )

    {

    if( a[j] % 2 == 0 ) chan ++ ; else le ++ ;

    j+= k;

    }

    result+= min(chan, le);

    }

    Mong mn đừng downvote e pls!!!

    Argentina sẽ vô địch World Cup 2022 !!!

    MESSI IS THE G.O.A.T !!!