c++编程:在有些日子里小 due 会想要起舞。小 due 判断当天是否适合起舞是根据舞蹈值来判断的。而舞蹈值的计算除了小 due 本人外谁也不知道。给定一个长度为 n 的整数数组 dance ,代表连续 n 天的舞蹈值。给定一个整数 time 。如果第 i 天满足以下所有条件,则小 due 认为当天是适合起舞的日子。 1. 第 i 天前后分别至少有 time 天。 2. 第 i 天前连续 time 天的舞蹈值非递减。 3. 第 i 天后连续 time 天的舞蹈值非递增。 更正式的,第 i 天是一个合适起舞的日子当且仅当:dance [i - time] <= dance [i - time + 1] <= ... <= dance [i] >= ... >= dance [i + time - 1] >= dance [i + time]. 请输出适合起舞日子的总数。 输入格式 第一行输入 n 和 time。 第二行输入 n 个整数,代表连续 n 天的舞蹈值。 输出格式 一个整数,代表适合起舞的日子的总数。
时间: 2024-02-22 18:55:54 浏览: 75
以下是对应的 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, time;
cin >> n >> time;
vector<int> dance(n);
for (int i = 0; i < n; i++) {
cin >> dance[i];
}
int ans = 0;
for (int i = time; i < n - time; i++) { // 从第 time 天到第 n-time 天遍历
bool is_valid = true;
for (int j = i - time + 1; j <= i; j++) { // 判断前 time 天舞蹈值非递减
if (dance[j] < dance[j - 1]) {
is_valid = false;
break;
}
}
if (!is_valid) continue;
for (int j = i + 1; j <= i + time; j++) { // 判断后 time 天舞蹈值非递增
if (dance[j] > dance[j - 1]) {
is_valid = false;
break;
}
}
if (!is_valid) continue;
ans++;
}
cout << ans << endl;
return 0;
}
```
思路如下:
遍历从第 time 天到第 n-time 天的每一天,对于每一天,判断前 time 天的舞蹈值是否非递减,后 time 天的舞蹈值是否非递增,如果都成立,则说明当前这一天是适合起舞的日子,ans++。最后输出 ans 即可。
阅读全文