力扣第463场周赛
3652. 按策略买卖股票的最佳时机 - 力扣(LeetCode)
前缀和
新数组从1开始计数
i从k开始,不要从0开始,不然会很麻烦
class Solution {
public:long long maxProfit(vector<int>& prices, vector<int>& strategy, int k) {int n = prices.size();vector<long long> sum(n + 1);vector<long long> prices_sum(n + 1);for (int i = 0; i < n; i++) {sum[i + 1] = sum[i] + prices[i] * strategy[i];prices_sum[i + 1] = prices_sum[i] + prices[i];}long long res = sum[n];for (int i = k; i <= n; i++) {long long t = sum[n] - sum[i] + sum[i - k] + prices_sum[i] -prices_sum[i - k / 2];res = max(res, t);}return res;}
};
3653. 区间乘法查询后的异或 I - 力扣(LeetCode)
class Solution {
public:int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {for (int i = 0; i < queries.size(); i++) {int left = queries[i][0];int right = queries[i][1];int p = queries[i][2];int e = queries[i][3];for (int j = left; j <= right; j += p) {nums[j] = (1LL*nums[j] * e) % 1000000007;}}int res = 0;for (int i = 0; i < nums.size(); i++) {res ^= nums[i];}return res;}
};
3655. 区间乘法查询后的异或 II - 力扣(LeetCode)
两道题目相同
前置知识:差分数组
1094. 拼车 - 力扣(LeetCode)
class Solution
{
public:bool carPooling(vector<vector<int>> &trips, int capacity){int d[1001] = {0};for (int i = 0; i < trips.size(); i++){int num = trips[i][0];int from = trips[i][1];int to = trips[i][2];d[from] += num;d[to] -= num;}int s = 0;for (int i = 0; i < 1001; i++){s += d[i];if (s > capacity){return false;}}return true;}
};
题解
商分数组
不会写
3654. 删除可整除和后的最小数组和 - 力扣(LeetCode)
前缀和+dp
class Solution
{
public:long long minArraySum(vector<int> &nums, int k){vector<long long> s(k, LLONG_MAX);s[0] = 0;long long res = 0;long long sum = 0;for (int i = 0; i < nums.size(); i++){sum = (sum + nums[i]) % k;res = min(res + nums[i], s[sum]);s[sum] = res;}return res;}
};