vijos P1062 迎春舞会之交谊舞

来源:互联网 发布:免费顶级域名申请 编辑:程序博客网 时间:2024/04/28 06:39

这题被归类为栈,所以用栈来做咯;

总体思想还是括号匹配,不过关键在于如何求出相互匹配的两人中夹杂着多少个男生,我的方法是定义结构体记录每个人左边男生的个数

#include<iostream>#include<stack>#define maxn 1500+5using 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;} 


0 0