解题分析
如果不改变一盏亮灯,改变其他n-1盏灯,改变之后亮灯数为n-l+1,如果不改变一盏暗灯,改变其他n-1盏灯,改变之后亮灯数为n-l-1,如果想要在最后把全部灯都打开,那么倒数第二部应该亮1盏灯,根据数学归纳法,倒数第三步应该亮n-2盏灯,倒数第三步应该亮3盏灯…
由此我们可以发现一个规律(详见代码)
代码
#include<stdio.h>
int main()
{
long long int n,l;
scanf("%lld%lld",&n,&l);
if(n%2==1&&l%2==0)printf("Impossible\n"); //如果n为奇数、l为偶数:无法做到
else if(n%2==0&&l%2==0)printf("%lld\n",n-l); //如果n为偶数、l为偶数:n-l次
else if(n%2==0&&l%2==1)printf("%lld\n",l); //如果n为偶数、l为奇数:l次
else
{
if(n>2*l)printf("%lld\n",l);
else printf("%lld\n",n-l);
} //如果n为奇数、l为奇数:n-l和l两者较小的
return 0;
}