题目大意
一次面包人做的面包因为灯泡太热而全部烤糊了,面包人十分的伤心。他觉得这一切都是灯泡的错(明明就是你把电灯泡乱放就去秀恩爱),所以,面包人发誓要大闹电灯泡工厂。
电灯泡工厂总共有n个位置,每个位置都有一个电灯泡,每个电灯泡都有两种状态。0表示关,1表示开。面包人觉得这么多电灯泡聚在一起能产生的热量能毁灭世界。面包人为了保卫世界的和平,于是他决定要关掉电灯泡。
当面包人把电灯泡全部关掉的时候,电灯泡工厂就会因为没有热能造电而失去作用,也就是说当电灯泡全部关掉的时候面包人就拯救了世界。
因为面包人是面包人,所以他有三只手,而他每次只能也必须改变三个电灯泡的状态。
然而,电源每秒能产生1xea的热量,当热量达到k时,世界就会砰的一声毁灭了。
那么,现在问题来了(挖掘机到底哪家强?)面包人能不能拯救面包球,如果能,输出最小的时间,否则输出‘lamp kill the world!’不加引号。(当然是蓝翔)
【注意】:所有数据至少包含3个0。
输入格式
输入一行n,k,n为电灯泡工厂的位置的个数,k为面包球所能承受的热量。
一行数字,表示第i个数字表示第i电灯泡的状态,0表示关,1表示开。
输出格式
输出面包人拯救面包球用的时间,如果世界毁灭了,输出’lamp kill the world!’(不加引号)。
输入/输出例子1
输入:
样例一:
5 1
0 1 1 0 0
样例二:
5 3
0 1 1 0 0
输出:
样例一:
lamp kill the world!
样例二:
2
样例解释
【样例解释】
样例二:
Time1:0 1 0 1 1 xea:1(time1)
Time2:0 0 0 0 0 xea:2 (time2)
【数据范围】
30%的数据:0<=k<=n<=100
60%的数据:0<=k<=n<=10000
100%的数据:0<=k<=n<=1000000
#include<bits/stdc++.h>
using namespace std;
int a[10000005]={0,3,2,1};
int main(){
for(int i=4;i<=2000000;i++)
a[i]=min(a[i-1]+1,a[i%3]+i/3);
int n,k,sb=0;
cin>>n>>k;
for(int i=1,s;i<=n;i++){
cin>>s;
if(s)sb++;
}
if(a[sb]<=k)
printf("%d",a[sb]);
else
cout<<"lamp kill the world!";
return 0;
}