第3题 修复信号灯
K个连续的工作信号灯。
输入样例:
10 6 5
2
10
1
5
9
输出样例:
1
第3题 修复信号灯
K个连续的工作信号灯。
输入样例:
10 6 5
2
10
1
5
9
输出样例:
1
【以下回答由 GPT 生成】
首先,根据题目给出的输入样例,我们可以看到N表示横道的数量,K表示需要修复的连续工作信号灯的数量,M表示信号灯的数量。
我们可以创建一个长度为N的数组,表示每一条横道上的信号灯是否工作。初始时,所有信号灯都是工作的。
然后,我们需要根据输入的M个需修复的信号灯的位置,将对应位置上的信号灯设置为需要修复。具体步骤如下:
首先,读取输入的N、K和M。
创建一个长度为N的数组lights
,初始值都设置为1,表示所有信号灯工作。
读取M个需修复的信号灯位置,并将对应位置上的信号灯设置为需要修复,即将lights
数组中对应位置上的元素设置为0。
遍历lights
数组,找到连续K个工作信号灯的起始位置。具体步骤如下:
start
为0,表示起始位置。count
为0,表示连续工作信号灯的数量。lights
数组,从索引0开始,判断当前位置的信号灯是否工作。如果工作,则将count
加1;否则,将count
设置为0,并将start
更新为当前位置的下一个位置。在遍历过程中,如果count
的值等于K,则找到了连续K个工作信号灯的起始位置,退出循环。
输出起始位置start
。
完整的代码如下所示:
#include <iostream>
#include <vector>
int main() {
int N, K, M;
std::cin >> N >> K >> M;
std::vector<int> lights(N, 1); // 初始化所有信号灯为工作状态
for (int i = 0; i < M; i++) {
int position;
std::cin >> position;
lights[position - 1] = 0; // 将对应位置上的信号灯设置为需要修复
}
int start = 0;
int count = 0;
for (int i = 0; i < N; i++) {
if (lights[i] == 1) {
count++;
if (count == K) {
start = i - K + 1;
break;
}
} else {
count = 0;
start = i + 1;
}
}
std::cout << start << std::endl;
return 0;
}
该程序首先读取输入的N、K和M,然后创建一个长度为N的数组lights
,初始值为1。接下来,根据输入的M个需修复的信号灯位置,将对应位置上的信号灯设置为0。然后,通过遍历lights
数组,找到连续K个工作信号灯的起始位置,并输出起始位置。