版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42449444/article/details/86654048
一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应的 n-1 盏灯就会由亮变灭,或者由灭变亮。保证不会有两个开关控制同样的 n-1 盏灯。
现在刘同学想把灯全部开好,但是这些灯一开始的状态非常乱,刘同学想知道最少需要按多少次开关才能使所有灯全部亮起。
单组数据输入,每组数据一行,两个数 n,l 分别代表灯的数量、最开始时亮着的灯的数量(1<l<n<10000000000)。
每组数据输出一个数,即能使所有灯全部亮起的最少的按开关的次数,如果无法做到灯全部亮起,输出“Impossible”
4 2
2
嘤嘤嘤,这是昨晚的小米OJ一月常规赛的第一题,通过率很低,只有17%,额 当时就写出来2题。
已知总共有n盏灯,其中有l盏是亮灯。只有俩种情况。①如果按的是一盏亮灯的开关,会改变其它n-1盏灯,那么将有 n-l+1 盏亮。②如果按的是一盏暗灯的开关,会改变其它n-1盏灯,那么将有 n-l-1 盏亮。 若最后有n盏灯亮,那么倒数第二步就应该有1盏灯亮,倒数第三步就应该有n-2盏灯亮,……由后往前亮灯的盏数:n-0、1、n-2、3、n-4、5、n-6、……,规律很明显。可以得出这样的结论:①如果n为偶数、m为偶数:n-m;②如果n为偶数、m为奇数:m;③如果n为奇数、m为偶数:不可能;④如果n为奇数、m为奇数:n-m和m两者之最小值。
def solution(line):
n,l = map(int,line.split())
flag1 = n % 2 == 0
flag2 = l % 2 == 0
if flag1:
if flag2:
return n-l
else:
return l
else:
if flag2:
return "Impossible"
else:
return min(n-l,l)