标签:
这题被归类为栈,所以用栈来做咯;
总体思想还是括号匹配,不过关键在于如何求出相互匹配的两人中夹杂着多少个男生,我的方法是定义结构体记录每个人左边男生的个数
#include<iostream> #include<stack> #define maxn 1500+5 using namespace std; struct stu { int a,sex;//a位,该人(无论男女)左边男生的个数,sex为该人的性别; }; stack<stu>root; int f[maxn];//读入数据的储存 int g[maxn];// 记录第i个女生与她前一个女生之间夹着多少个男生; int re[maxn];//记录结果 int main() { int n; while(cin>>n) { f[0]=0; for(int i=1;i<=n;i++) cin>>f[i]; for(int i=1;i<=n;i++) g[i]=f[i]-f[i-1]; while(root.size()) root.pop();//清空 int sum=0; for(int i=1;i<=n;i++) { for(int j=0;j<g[i];j++) { stu x; x.a=sum; x.sex=1; root.push(x); sum++; } re[i]=sum-root.top().a; root.pop(); } cout<<re[1]; for(int i=2;i<=n;i++) cout<<" "<<re[i]; cout<<endl; } return 0; }
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/45364945