解:
2025-05-17 14:39:03
发布于:广东
34阅读
0回复
0点赞
我假期结束了
友好提示:容易超时,可以从不同思路写
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int quickSelect(vector<int>& nums, int left, int right, int k) {
if (left == right) return nums[left];
int pivot = nums[left + (right - left) / 2];
int i = left, j = right;
while (i <= j) {
while (nums[i] > pivot) i++;
while (nums[j] < pivot) j--;
if (i <= j) swap(nums[i++], nums[j--]);
}
if (left + k - 1 <= j) return quickSelect(nums, left, j, k);
if (left + k - 1 >= i) return quickSelect(nums, i, right, k - (i - left));
return nums[j + 1];
}
int main() {
int n, k, f, t, m;
cin >> n >> k >> f >> t >> m;
vector<int> arr(n);
arr[0] = f;
for (int i = 1; i < n; ++i) {
arr[i] = (arr[i-1] + t) % m;
}
cout << quickSelect(arr, 0, n - 1, k) << endl;
return 0;
}
全部评论 1
#include<bits/stdc++.h> using namespace std; int n,k,f,t,m; int main(){ cin>>n>>k>>f>>t>>m; vector<int>a(n); a[0]=f; for(int i=1;i<n;i++) { a[i]=(a[i-1]+t)%m; } nth_element(a.begin(),a.end()-k,a.end()); cout<<a[n-k]; return 0; }
3天前 来自 浙江
0招
昨天 来自 浙江
0
有帮助,赞一个