社区讨论
求助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 条回复,欢迎继续交流。
正在加载回复...