qu(判定操作序列)NOIP模拟 数据结构判断 模拟
【問題描述】 給你一個(gè)操作序列,問這個(gè)維護(hù)操作序列的數(shù)據(jù)結(jié)構(gòu)是哪一種?
【輸入格式】 第一行是一個(gè)正整數(shù)?代表操作數(shù)目。 接下來?行,每行兩個(gè)正整數(shù)???, ?。如果??? = 1,代表我們將?加入數(shù)據(jù)結(jié)構(gòu);如果??? = 2,代表我們從數(shù)據(jù)結(jié)構(gòu)中取出了一個(gè)元素,這個(gè)元素的值是?。
【輸出格式】 輸出三行,第一行代表數(shù)據(jù)結(jié)構(gòu)是否可能是棧,第二行代表數(shù)據(jù)結(jié)構(gòu)是否可 能是隊(duì)列,第三行代表數(shù)據(jù)結(jié)構(gòu)是否可能大根堆。每一行的結(jié)果都只可能是“YES” 或者“No”。
根據(jù)題意,建立三種數(shù)據(jù)結(jié)構(gòu):隊(duì)列、優(yōu)先隊(duì)列(本質(zhì)是大根堆)和棧,然后模擬即可。
坑點(diǎn)有兩個(gè)。
一個(gè)是,當(dāng)數(shù)據(jù)全部彈出后,還有彈出操作,那一定不滿足任意數(shù)據(jù)結(jié)構(gòu),三個(gè)都是No
第二個(gè),題目的YES是全部大寫的,但是No的o是小寫的。
附上代碼
#include<cstdio> #include<queue> using namespace std; template<class T> inline void read(T &_a){bool f=0;int _ch=getchar();_a=0;while(_ch<'0' || _ch>'9'){if(_ch=='-')f=1;_ch=getchar();}while(_ch>='0' && _ch<='9'){_a=(_a<<1)+(_a<<3)+_ch-'0';_ch=getchar();}if(f)_a=-_a; }int n,opt,v,stack[10001],head; bool ansq=true,anspq=true,ansstk=true; queue<int>q; priority_queue<int>pq;int main() {freopen("qu.in","r",stdin);freopen("qu.out","w",stdout);read(n);for (register int i=1;i<=n;++i){read(opt); read(v);if(opt==1){if(ansq) q.push(v);if(ansstk) stack[++head]=v;if(anspq) pq.push(v);} else {if(ansstk){if(head&&stack[head]==v) --head;else ansstk=false;}if(ansq){if(!q.empty()&&q.front()==v) q.pop();else ansq=false;}if(anspq){if(!pq.empty()&&pq.top()==v) pq.pop();else anspq=false;}}}printf("%s\n%s\n%s",ansstk?"YES":"No",ansq?"YES":"No",anspq?"YES":"No");return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/jaywang/p/7755945.html
總結(jié)
以上是生活随笔為你收集整理的qu(判定操作序列)NOIP模拟 数据结构判断 模拟的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ionic APP 热更新
- 下一篇: libxxx.so- text relo