原题链接:http://codeforces.com/contest/1040/problem/B
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 i−k,i−k+1,⋯,i−1,i+1,⋯,i+k−1,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.
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(1≤n≤1000,0≤k≤1000) — the number of skewers and the number of skewers from each side that are turned in one step.
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.
7 2
2
1 6
5 1
2
1 4
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();}