zoukankan      html  css  js  c++  java
  • #2019120500008-LG 数据结构 栈(1)

    P1044 P1449 P1739 数据结构 栈

    P1044 火车进站【模板 栈】

    会TLE 所以(n leq 18)(14 leq n leq 18)的数据本地跑完自动输出(骗分

    #include <cstdio>
    using namespace std;
    const int N=50;
    int out[N],n,tp,num,stk[N],ans=0;
    void dfs(int x){
    	int tmp,cat=0;
    	if(x>n){
    		ans++;
    		while(tp){
    			cat++,out[++num]=stk[tp--];
    		}
    		//for(int i=1;i<=n;i++){
    		//	printf("%d",out[i]);
    		//}
    		//printf("
    ");
    		while(cat--){
    			stk[++tp]=out[num--];
    		}
    		return ;
    	}
    	if(tp){
    		tmp=stk[tp--];
    		out[++num]=tmp;
    		dfs(x);
    		num--;
    		stk[++tp]=tmp;
    	}
    	stk[++tp]=x;
    	dfs(x+1);
    	tp--;
    } 
    int ANS[20];
    int main( ){
    	ANS[14]=2674440;
    	ANS[15]=9694845;
    	ANS[16]=35357670;
    	ANS[17]=129644790;
    	ANS[18]=477638700;
    	scanf("%d",&n);
    	if(n>=14){
    		printf("%d",ANS[n]);
    		return 0;
    	}
    	dfs(1);
    	printf("%d",ans);
    	return 0;
    }
    

    P1449 后缀表达式

    也叫逆波兰表达式
    对于输入的序列,每两个数字和一个符号进行计算,返回一个数值替代这三个符号,直至最后栈中只剩下一个数

    #include<iostream>
    #include<cstdio>
    using namespace std;
    long long stk[1000];
    int main(){
    	long long i=0,now=0;
    	char op;
        while((op=getchar())!='@'){
            if(op>='0'&&op<='9') now*=10,now+=op-'0';
            else if(op=='.'){
                stk[++i]=now;
                now=0;
            }
            else if(op=='+'){
                stk[i-1]=stk[i-1]+stk[i];
                stk[i]=0;
                i--;
            }
            else if(op=='-'){
                stk[i-1]=stk[i-1]-stk[i];
                stk[i]=0;
                i--;
            }
            else if(op=='*'){
                stk[i-1]=stk[i-1]*stk[i];
                stk[i]=0;
                i--;
            }
            else if(op=='/'){
                stk[i-1]=stk[i-1]/stk[i];
                stk[i]=0;
                i--;
            }
        }
        printf("%lld",stk[1]);
        return 0;
    }
    

    P1739 括号匹配

    一开始不是按照栈写的,也能过

    本质上是栈

    #include <cstring>
    #include <cstdio>
    using namespace std;
    char s[260]; 
    int left=0,right=0,ok=0;
    int main(){
    	scanf("%s",s+1);
    	int i=1;
    	while(s[i]!='@'){
    		if(s[1]==')') {
    			printf("NO");
    			return 0;
    		}
    		if(s[i]=='(') ok++;
    		if(s[i]==')') ok--;
    		//if(s[i]==')'&&left==0) right++;
    		//if(s[i]==')'&&left!=0) left--;
    		if (ok<0) {
    			printf ("NO");
    			return 0;
    		}
            
    		i++;
    	}
    	if (s[i]=='@') {
    			if (!ok) printf("YES");
    			else printf("NO");
    			return 0;
    		}
    	//if(left!=0) printf("NO");
    	//else printf("YES");
    	return 0;
    }
    
    要做就做南波万
  • 相关阅读:
    Mybatis Cause: java.lang.ClassNotFoundException: Cannot find class:
    java常见面试题及部分答案
    页面css样式找不到问题
    深入分析Java I/O的工作机制 (二)
    深入分析Java I/O的工作机制 (一)
    LifecycleProcessor not initialized
    几个java小例子
    idea 过段时间java程序包不存在问题 ?
    使用HttpClient发送Get/Post请求 你get了吗?
    Convert PIL Image to byte array?
  • 原文地址:https://www.cnblogs.com/liuziwen0224/p/11992349.html
Copyright © 2011-2022 走看看