试题一参考:
小D是一名老师,他想选出一些同学床架一个团体比赛,总共有n个同学,每个同学有一个能力值x和一个合作制y,小D将这小同学拍成一排,选人规则如下:小D将选择一排中连续的K个同学参加比赛,而且为例保证成绩,者K个同学的能力值不能小于a,合作值不能小于b。小D想知道总共有多少种可能的选人方案。
输入描述
第一行四个正整数n,k,a,b
第二行n个通过空格隔开的正整数表示一排n个同学的能力值。
第三行n个通过空格隔开的正整数表示一排n个同学的合作值。
输出描述:
输出一个非负数表示选人的方案数
#include <iostream>
#include <vector>
using namespace std;
int count_selections(int n, int k, int a, int b, vector<int>& abilities, vector<int>& cooperations) {
int count = 0;
for (int i = 0; i <= n - k; ++i) {
bool valid = true;
for (int j = i; j < i + k; ++j) {
if (abilities[j] < a || cooperations[j] < b) {
valid = false;
break;
}
}
if (valid) {
count++;
}
}
return count;
}
int main() {
int n, k, a, b;
cin >> n >> k >> a >> b;
vector<int> abilities(n);
vector<int> cooperations(n);
for (int i = 0; i < n; ++i) {
cin >> abilities[i];
}
for (int i = 0; i < n; ++i) {
cin >> cooperations[i];
}
int result = count_selections(n, k, a, b, abilities, cooperations);
cout << result << endl;
return 0;
}
试题二参考:
天帝被愚公的诚心感动,命令手下的仙人帮助移山。然而仙人的法术也是有局限性的,山势连绵起伏,法术并不能直接把山一走。每次施法,可以把一段连续区域的汕头一走相同的高度。现在愚公想知道什么时候会有至少一个山头高度小于等于0.给出一个长度为n的数组和m表示山头的高度和可以施法的次数,每次施法还会给出左右断点L,R和高度h,表示将al到ar减去h。问在那次操作时候会存在ai小于等于0
输入描述:
第一行两个数字n和m表示山头数量和施法次数
第二行n个数,分别表示山的高度
接下来m行,每行3个数字L,R,h表示依次具体的施法参数
输出描述:一个整数
#include <iostream>
#include <vector>
using namespace std;
bool has_negative_height(const vector<int>& heights) {
for (int height : heights) {
if (height <= 0) {
return true;
}
}
return false;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> heights(n);
for (int i = 0; i < n; ++i) {
cin >> heights[i];
}
for (int i = 0; i < m; ++i) {
int L, R, h;
cin >> L >> R >> h;
for (int j = L - 1; j <= R - 1; ++j) {
heights[j] -= h;
}
if (has_negative_height(heights)) {
cout << i + 1 << endl; // 1-indexed
return 0;
}
}
cout << -1 << endl; // No mountain head becomes less than or equal to 0
return 0;
}
#笔试##小米##小米24春招#