method 1:
数组模拟队列,优点:效率高,代码简单。
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1000;
bool cmp(int a,int b) {
return a>b;
}
int main() {
int t;
cin>>t;
while (t--) {
int m,po;
cin>>m>>po;
int _sort_data[maxn],data[maxn];
int _first = 0,_rear = m-1;
for (int i=0;i<m;i++) {
cin>>_sort_data[i];
data[i] = _sort_data[i];
}
sort(_sort_data,_sort_data+m,cmp);
int ans = 0,j=0;
while (!(_first==po&&data[po]==_sort_data[j])) {
if (data[_first]==_sort_data[j]) {
j++;
ans++;
_first++;
} else {
_rear++;
data[_rear] = data[_first];
if (_first == po) po = _rear;
_first++;
}
}
cout<<ans+1<<endl;
}
}
method 2:
stl数组,pair,思想和一完全一样,不过用的知道较多,对于熟悉stl的知识比较有用处。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int t;
cin>>t;
while (t--) {
int m,po;
cin>>m>>po;
vector<pair<int,bool> > data;
int _max = 0;
for (int i=0;i<m;i++) {
pair<int,bool> tmp;
cin>>tmp.first;
if (_max<tmp.first) _max = tmp.first;
tmp.second = ((i==po)?1:0);
data.push_back(tmp);
}
int ans = 0;
while(!data.empty()) {
pair<int,bool> tmp = data.front();
if (tmp.second&&tmp.first==_max) {
ans++;
break;
}
else if(!tmp.second&&tmp.first==_max) {
ans++;
data.erase(data.begin());
_max = data.front().first;
for (pair<int,bool> it:data) {
if (_max<it.first) _max = it.first;
}
}
else if (tmp.first!=_max) {
data.push_back(data.front());
data.erase(data.begin());
}
}
cout<<ans<<endl;
// 分支语句啊,分支语句啊,独立的分支
}
}
本文介绍两种解决特定问题的方法:一种使用数组模拟队列,实现高效且简洁;另一种利用STL容器与pair,虽然涉及更多知识点但有助于加深对STL的理解。这两种方法都用于处理一个包含排序和队列操作的问题。
4949

被折叠的 条评论
为什么被折叠?



