题意:
introvert 内向的 extrovert外向的
一辆公交有n排座位,每排座位有两个椅子。
接着给出每排座位的宽度。
这时有2*n个人要上车,这群人有两种类型。
1、内向的人:会优先选择座位宽度最小的那排就坐,最好旁边是没人的。
2、外向的人:会优先选择座位旁边有人(内向的人)的那排就坐,在此基础上座位选择越大越好。
题解:
对weight数组进行排序。
内向的人选择宽度最小的。我们用cnt模拟扫一下数组即可。每次++.。同时入栈,栈顶则是宽度最大的,外向的人即可选择。一次AC。训练AC率。
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
const int maxn = 2e6+100;
struct W
{
int weight;
int index;
}w[maxn];
bool cmp(W a,W b)
{
return a.weight<b.weight;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i].weight);
w[i].index=i;
}
sort(w+1,w+n+1,cmp);
string order;
cin>>order;
stack<W> s;
int siz = order.length();
int cnt=1;
for(int i=0;i<siz;i++)
{
if(order[i]=='0')
{
s.push(w[cnt]);
//cout<<w[cnt].weight<<" "<<w[cnt].index<<endl;
printf("%d ",w[cnt].index);
cnt++;
}
else
{
W tmp = s.top();
s.pop();
printf("%d ",tmp.index);
}
}
return 0;
}