纯暴力解法,十进制转2进制,然后遍历二进制,记录最小值,不用记录最近值,因为从前往后遍历,找的的最小值一定是最近值。

#include <climits>
#include <iostream>
#include <vector>
using namespace std;


vector<int> trans2Bit(vector<int>& datas) {
    vector<int> bits;
    for (int& data : datas) {
        for (int i = 0; i < 8; i++) {
            if (data % 2 == 0) {
                bits.push_back(0);
                data = data / 2;
            }
            else {
                bits.push_back(1);
                data = data / 2;
            }
        }
    }
    return bits;
}


void solve(vector<int>& datas, long k, int m) {
    vector<int> bits = trans2Bit(datas);
    int start = -1;
    int minStart = -1;
    int len = 0;
    int minLen = INT_MAX;
    int flag = 0;
    for (int i = m + 1; flag != 1; i++) {
        if (i == m) flag++;
        if (len == 0 && bits[i] == 1) {
            start = i;
            len = 1;
        }
        else if (len != 0 && bits[i] == 1) {
            len++;
        }
        else if (len != 0 && bits[i] != 1) {
            if (len == k) {
                cout << start;
                return;
            }
            if (len > k && len < minLen) {
                minStart = start;
                minLen = len;
                start = -1;
                len = 0;
            }
            else {
                start = -1;
                len = 0;
            }
        }
        if (i == bits.size() - 1) i = -1;
    }
    cout << minStart;
    return;
}


int main() {

    int k, m;
    cin >> k >> m;
    vector<int> datas;
    int x;
    while (cin >> x) datas.push_back(x);

    solve(datas, k, m);

}