CF1040B Shashlik Cooking

版权声明:大佬您能赏脸,蒟蒻倍感荣幸,还请联系我让我好好膜拜。 https://blog.csdn.net/ShadyPi/article/details/82936192

原题链接:http://codeforces.com/contest/1040/problem/B

Shashlik Cooking

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 n n skewers parallel to each other, and enumerated them with consecutive integers from 1 1 to n n in order from left to right. For better cooking, he puts them quite close to each other, so when he turns skewer number i i , it leads to turning k k closest skewers from each side of the skewer i i , that is, skewers number i k , i k + 1 ,   , i 1 , i + 1 ,   , i + k 1 , i + k i−k, i−k+1, \cdots, i−1, i+1,\cdots, i+k−1, i+k (if they exist).

For example, let n = 6 n=6 and k = 1 k=1 . When Miroslav turns skewer number 3 3 , then skewers with numbers 2 , 3 2, 3 , and 4 4 will come up turned over. If after that he turns skewer number 1 1 , then skewers number 1 , 3 1, 3 , and 4 4 will be turned over, while skewer number 2 2 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 n n skewers with the minimal possible number of actions. For example, for the above example n = 6 n=6 and k = 1 k=1 , two turnings are sufficient: he can turn over skewers number 2 2 and 5 5 .

Help Miroslav turn over all n n skewers.

Input

The first line contains two integers n n and k ( 1 n 1000 , 0 k 1000 ) k (1≤n≤1000, 0≤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 l l — the minimum number of actions needed by Miroslav to turn over all n n skewers. After than print l l integers from 1 1 to n n denoting the number of the skewer that is to be turned over at the corresponding step.

Examples
input

7 2

output

2
1 6

input

5 1

output

2
1 4

Note

In the first example the first operation turns over skewers 1 , 2 1, 2 and 3 3 , the second operation turns over skewers 4 , 5 , 6 4, 5, 6 and 7 7 .

In the second example it is also correct to turn over skewers 2 2 and 5 5 , but turning skewers 2 2 and 4 4 , or 1 1 and 5 5 are incorrect solutions because the skewer 3 3 is in the initial state after these operations.

题解

直接对 2 × k + 1 2\times k+1 取模,如果余数大于 k k ,就可以直接在后面补一个;否则我们就把第一个也往前调一点。

代码
#include<bits/stdc++.h>
using namespace std;
const int M=1e3+5;
int n,k,st=1;
void in(){scanf("%d%d",&n,&k);}
void ac()
{
	if(n%(2*k+1)>k)st=k+1,printf("%d\n",n/(2*k+1)+1);
	else if(n%(2*k+1)==0)st=k+1,printf("%d\n",n/(2*k+1));
	else printf("%d\n",n/(2*k+1)+1);
	for(;st<=n;st+=2*k+1)printf("%d ",st);
}
int main(){in(),ac();}

猜你喜欢

转载自blog.csdn.net/ShadyPi/article/details/82936192
今日推荐