1. 程式人生 > >CodeForces - 1040B Shashlik Cooking(水題)

CodeForces - 1040B Shashlik Cooking(水題)

-s them tput mini else sts thml perfect row

題目: B. Shashlik Cooking time limit per test 1 second memory limit per test 512 megabytes input standard input output standard output

Long story short, shashlik is Miroslav‘s favorite food. Shashlik is prepared on several skewers simultaneously. There are two states for each skewer: initial and turned over.

This time Miroslav laid out nn skewers parallel to each other, and enumerated them with consecutive integers from 11 to nn in order from left to right. For better cooking, he puts them quite close to each other, so when he turns skewer number ii, it leads to turning kk closest skewers from each side of the skewer

ii, that is, skewers number iki−k, ik+1i−k+1, ..., i1i−1, i+1i+1, ..., i+k1i+k−1, i+ki+k (if they exist).

For example, let n=6n=6 and k=1k=1. When Miroslav turns skewer number 33, then skewers with numbers 22, 33, and 44 will come up turned over. If after that he turns skewer number

11, then skewers number 11, 33, and 44 will be turned over, while skewer number 22 will be in the initial position (because it is turned again).

As we said before, the art of cooking requires perfect timing, so Miroslav wants to turn over all nn skewers with the minimal possible number of actions. For example, for the above example n=6n=6 and k=1k=1, two turnings are sufficient: he can turn over skewers number 22 and 55.

Help Miroslav turn over all nn skewers.

Input

The first line contains two integers nn and kk (1n10001≤n≤1000, 0k10000≤k≤1000) — the number of skewers and the number of skewers from each side that are turned in one step.

Output

The first line should contain integer ll — the minimum number of actions needed by Miroslav to turn over all nn skewers. After than print llintegers from 11 to nn denoting the number of the skewer that is to be turned over at the corresponding step.

Examples input Copy
7 2
output Copy
2
1 6
input Copy
5 1
output Copy
2
1 4
Note

In the first example the first operation turns over skewers 11, 22 and 33, the second operation turns over skewers 44, 55, 66 and 77.

In the second example it is also correct to turn over skewers 22 and 55, but turning skewers 22 and 44, or 11 and 55 are incorrect solutions because the skewer 33 is in the initial state after these operations.

題目大意:

翻烤串問題,有N個烤串需要被翻面,每次翻第i個烤串可以使得第i-k到第i+k個烤串也同時翻轉,問需要至少多少次的翻轉使得翻轉烤串的數量最大,輸出次數和每次翻轉烤串的位置。

思路:

首先,每一次翻轉烤串的最大影響個數為2*k+1(本身和左右都影響到的烤串)。那麽我們可以先將(2*k+1)的倍數烤串翻轉,余數進行判斷。

如果余數大於k,那麽翻轉次數加一;如果余數為零,那麽翻轉次數就為n/(2*k+1);如果余數小於k,那麽翻轉次數加一,並使第一個翻轉烤串的位置從余數開始,保證答案正確。

AC代碼如下:

#include<stdio.h>

int main()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int mi=n%(2*k+1);
    if(mi>k) mi=k+1,printf("%d\n",n/(2*k+1)+1);
    else if(mi==0) mi=k+1,printf("%d\n",n/(2*k+1));
    else {
        printf("%d\n",n/(2*k+1)+1);
    }
    for(;mi<=n;mi+=2*k+1) printf("%d ",mi);
    return 0;
}

CodeForces - 1040B Shashlik Cooking(水題)