当前位置: 首页 > 工具软件 > shashlik > 使用案例 >

CF1040B Shashlik Cooking

祁驰
2023-12-01

原题链接: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 n skewers parallel to each other, and enumerated them with consecutive integers from 1 1 1 to n 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 i, it leads to turning k k k closest skewers from each side of the skewer i 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 ik,ik+1,,i1,i+1,,i+k1,i+k (if they exist).

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

Help Miroslav turn over all n n n skewers.

Input

The first line contains two integers n n n and k ( 1 ≤ n ≤ 1000 , 0 ≤ k ≤ 1000 ) k (1≤n≤1000, 0≤k≤1000) k(1n1000,0k1000) — 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 l — the minimum number of actions needed by Miroslav to turn over all n n n skewers. After than print l l lintegers from 1 1 1 to n 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 1,2 and 3 3 3, the second operation turns over skewers 4 , 5 , 6 4, 5, 6 4,5,6 and 7 7 7.

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

题解

直接对 2 × k + 1 2\times k+1 2×k+1取模,如果余数大于 k 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();}
 类似资料:

相关阅读

相关文章

相关问答