qu (판정 조작 시퀀스) NOIP 시 뮬 레이 션 데이터 구조 판단 시 뮬 레이 션

6918 단어
[문제 설명] 조작 서열 을 드 리 겠 습 니 다. 이 유지 보수 작업 서열 의 데이터 구 조 는 어떤 것 입 니까?
[입력 형식] 첫 줄 은 정수 입 니까?대표 조작 수.다음?그래, 줄 마다 두 개의 정수?????하면, 만약, 만약...1. 우 리 를 대표 하 는 것 은?데이터 구조 추가;하면, 만약, 만약...2. 우리 가 데이터 구조 에서 원 소 를 꺼 냈 다 는 뜻 입 니 다. 이 요소 의 값 은?
[출력 형식] 출력 세 줄, 첫 번 째 줄 은 데이터 구조 가 스 택 일 수 있 는 지, 두 번 째 줄 은 데이터 구조 가 대기 열 일 수 있 는 지, 세 번 째 줄 은 데이터 구조 가 큰 루트 로 쌓 일 수 있 는 지 를 나타 낸다.모든 줄 의 결 과 는 'YES' 나' No '일 수 있다.
제목 에 따라 세 가지 데이터 구 조 를 구축 합 니 다. 대기 열, 우선 대기 열 (본질 은 큰 뿌리 더미) 과 스 택 을 만 든 다음 에 시 뮬 레이 션 하면 됩 니 다.
구덩이 에 두 개가 있다.
하 나 는 데이터 가 모두 팝 업 된 후에 팝 업 작업 이 있 으 면 임의의 데이터 구 조 를 만족 시 키 지 못 할 것 입 니 다. 세 가 지 는 모두 No 입 니 다.
두 번 째, 제목 의 YES 는 모두 대문자 이지 만 No 의 o 는 소문 자 입 니 다.
코드 를 첨부 하 다
#include
#include
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
%s
%s
",ansstk?"YES":"No",ansq?"YES":"No",anspq?"YES":"No"); return 0; }

 
다음으로 전송:https://www.cnblogs.com/jaywang/p/7755945.html

좋은 웹페이지 즐겨찾기