Codeforce - 1040B - Shashlik Cooking(思维)

Codeforce - 1040B - Shashlik Cooking(思维)_第1张图片

Input

7 2

Output

2
1 6

Input

5 1

Output

2
1 4

Source::Click here

题意

给你n串羊肉串,它们的编号依次为1,2,3,,,n。羊肉串初始状态全为正面,你的任务是将所有的羊肉串翻转过来。规则是:当每次选择一个位置pos进行翻转,pos-k和pos+k的位置都会被翻转。求最少多少次能将所有的羊肉串全部翻转过来。、

思路

这个题可以分类讨论。对n和2k+1的关系进行讨论。

  1. 当n<=2k+1,进行一次就可完成。因为选择一个pos,最大的覆盖范围是2k+1.
  2. 当n>2k+1,需要对r(r=n%(2k+1))进行讨论 ①:当r=k+1时,初始位置从k+1开始,每隔2k+1选定一个。

                                                                                                                                                                                            

AC Code

#include
using namespace std;

int n, k, r, idx;
vector V;
int main()
{
    scanf("%d%d",&n,&k);
    r = n % (2 * k + 1);
    if(r == 0) r += (2 * k + 1);///当n是2k+1的整数倍,将余数记为2k+1用于后续操作
    if(n <= 2 * k + 1)///当n小于2k+1时,即即一次就能完成操作,如(左边k个,1,右边k个,即可以进行一次就能完成操作)
    {
        puts("1");
        printf("%d\n",min(n, k + 1));///若1+k

 

你可能感兴趣的:(【思维】)