1 条题解

  • 2
    @ 2023-8-8 15:15:01
    #include<iostream>
    #include<cstdio>
    #include<vector>
    #include<queue>
    using namespace std;
    const int N=1000+7;
    int n,val[N],minx[N],col[N];
    bool flag;
    vector<int> p[N];
    void init(){
    	cin>>n;
    	for(int i=1;i<=n;i++)
    		scanf("%d",&val[i]);
    	minx[n+1]=n+1;
    	for(int i=n;i>=1;i--)
    		minx[i]=min(minx[i+1],val[i]);
    	for(int i=1;i<=n;i++)
    		for(int j=i+1;j<=n;j++)
    			if(val[i]<val[j]&&minx[j+1]<val[i]) p[i].push_back(j),p[j].push_back(i);
    }
    void run(){
    	for(int i=1;i<=n;i++)
    		if(!col[i]){
    			queue<int> q;
    			col[i]=1;
    			q.push(i);
    			while(!q.empty()){
    				int u=q.front();
    				q.pop();
    				for(int j=0;j<p[u].size();j++){
    					int v=p[u][j];
    					if(col[v]){
    						if(col[v]==col[u]){
    							flag=1;
    							return;
    						}
    						continue;
    					}
    					col[v]=3-col[u];
    					q.push(v);
    				}
    			}
    		}
    }
    struct stack{
    	int a[N],p=0;
    	int top(){ return a[p]; }
    	bool empty(){ return p==0; }
    	void pop(){ if(p) p--;}
    	void push(int x){ a[++p]=x; }
    }s[3];
    int now;
    bool judge(int id){
    	if(s[id].empty()||s[id].top()!=now+1) return 0;
    	return 1;
    }
    void Pop(int id){
    	now++;
    	s[id].pop();
    	putchar(id==1 ?'b' :'d');
    	putchar(' ');
    }
    void Push(int v,int id){
    	if(id==2) while(judge(1)) Pop(1);
    	while(!s[id].empty()&&s[id].top()<v){
    		if(!judge(id)) Pop(3-id);
    		else Pop(id);
    	}
    	if(id==2) while(judge(1)) Pop(1);
    	s[id].push(v);
    	putchar(id==1 ?'a' :'c');
    	putchar(' ');
    }
    void print(){
    	for(int i=1;i<=n;i++){
    		Push(val[i],col[i]);
    	}
    	while(!s[1].empty()){
    		if(!judge(1)) Pop(2);
    		else Pop(1);
    	}
    	while(!s[2].empty()) Pop(2);
    }
    int main(){
    	//freopen("1.txt","r",stdin);
    	//freopen("2.txt","w",stdout);
    	init();
    	run();
    	if(flag){
    		printf("0");
    		return 0;
    	}
    	print();
    	return 0;
    }
    
    • 1

    信息

    ID
    1666
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    21
    已通过
    12
    上传者