社区讨论

求助dalaoTAT

P1155[NOIP 2008 提高组] 双栈排序参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6m9584
此快照首次捕获于
2025/11/20 07:11
4 个月前
此快照最后确认于
2025/11/20 07:11
4 个月前
查看原帖
我的程序只有四十分应该方法出了问题,
然而我个人认为我的想法应该没有错,还请大佬指教【严肃脸】
CPP
#include<cmath>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,c,a[1005],b[1005],chu,p,q;//a,b为栈,p,q为指针,chu为输出指针
string st;
bool check()
{
    bool f=false;
    if (a[p]-chu==1) {chu++;p--;st+='b';f=true;}//处理a,b中可输出的字符
    if (b[q]-chu==1) {chu++;q--;st+='d';f=true;}
    return f;
}
int main()
{
    //freopen("1155.in","r",stdin);
    //freopen("1155.out","w",stdout);
    cin>>n;
    for (int i=1;i<=n;i++)
    {
        scanf("%d",&c);
        if (c-chu==1) //这里处理直接就能输出的
        {
        st+="ab";
        chu++;
        while (check());
        continue;
        }
        if (p==0 || (a[p]>c && (b[q]<c || a[p]<b[q]))) {p++;a[p]=c;st+='a';} else//不能直接输出则判断放入a栈还是b栈
        if (q==0 || b[q]>c) {q++;b[q]=c;st+='c';} else
        {cout<<0<<endl;return 0;}
    }
    while (check());
    if (chu!=n) {cout<<0<<endl;return 0;}
    for (int i=0;i<st.size();i++) printf("%c ",st[i]);
    return 0;
}
诚挚感谢^_^

回复

1 条回复,欢迎继续交流。

正在加载回复...