Given : 
Objective : Return the minimum number of lights that should be switched ON to light the whole corridor. Return -1 if the whole corridor cannot be lighted.
Consider the below example: 
Power of each bulb is 3. 
Bulbs in cells [ 2, 3, 4 ] are in working condition.
#include<iostream>
#include<vector>
using namespace std;
int solve (vector<int> &jail, int power) {
    int cells = jail.size();
    int count = 0;
    int pos = 0;
    bool lit = false;
    while (pos < cells) {
        lit = false;
        int from_right = min (cells-1, pos + power - 1);
        int from_left =  max (0, pos - power + 1);
        // Check from right
        for (int cell_no = from_right; cell_no >= pos; cell_no--) {
            if (A[cell_no] == 1) {
                count++;
                pos = cell_no + power; // new pos of the next cell to be lit.
                lit = true;
                break;
            }
        }
        if (!lit) {
            // Check from left;
            for (int cell_no = pos-1; cell_no >= from_left; cell_no--) {
                if (A[cell_no] == 1) {
                    count++;
                    pos = cell_no + power; // new pos of the next cell to be lit.
                    lit = true;
                    break;
                }
            }
        }
        if (!lit)
            return -1;
    }
    return count;
}
int main() {
    vector<int> jail1 = {0, 0, 1, 1, 1, 0, 0};
    cout << "Bulbs switched on : " << solve(jail1, 3) << endl;
    vector<int> jail2 = {1, 1, 1};
    cout << "Bulbs switched on : " << solve(jail2, 3) << endl;
  
    vector<int> jail3 = {0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0};
    cout << "Bulbs switched on : " << solve(jail3, 12) << endl;
    vector<int> jail4 = {0, 1, 0};
    cout << "Bulbs switched on : " << solve(jail4, 1) << endl;
    return 0;
}
Output
Bulbs switched on : 2
Bulbs switched on : 1
Bulbs switched on : 2
Bulbs switched on : -1