线性表。。

P3613 【深基15.例2】寄包柜 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

开不出那么大的数组

所以用vector动态数组

vector< vector<int> >shuzu(n,0);二维vector初始化

shuzu.size()读取长度

shuzu.resize()改变长度

#include<bits/stdc++.h>
using namespace std;

int n,q,opt,i,j,k;
int main(){
	cin>>n>>q;
	vector< vector<int> >jbg(n+1);
	while(q--){
		cin>>opt;
		if(opt==1){
			cin>>i>>j>>k;
			if(jbg[i].size()<j+1)
				jbg[i].resize(j+1);
			jbg[i][j]=k;
			
		}else{
			cin>>i>>j;
			cout<<jbg[i][j]<<endl;
		}
	}
	
	
}

P1241 括号序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一开始用stack写 发现循环不好写 stack内部数据似乎很难读取

所以直接用数组就行

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int a[105]; 

int main()
{
    int i,j;
    string s;
    cin >> s;
    for (i=0; i<s.length(); i++) {
        if (s[i] == ')') {            for (j=i-1; j>=0; j--) {
                if (s[j] == '(' and a[j] == 0) { 
                    a[i] = a[j] = 1;
                    break;
                }
                else if (s[j] == '[' and a[j] == 0) break; 
            }
           
        }
      
        else if (s[i] == ']') {
            for (j=i-1; j>=0; j--) {
                if (s[j] == '[' and a[j] == 0) {
                    a[i] = a[j] = 1;
                    break;
                }
                else if (s[j] == '(' and a[j] == 0) break;
            }
        }
    }
    for (i=0; i<s.length(); i++) {
        if (a[i] == 0) { 
            if (s[i] == '(' or s[i] == ')') cout << "()";
            else cout << "[]";
        }
        else cout << s[i]; 
    }
    return 0;
}

P1449 后缀表达式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

stack模板题 先进后出

zhan.pop()弹出

zhan.push(x)压入

zhan.top()首元素

 #include<bits/stdc++.h>
 using namespace std;
 
 stack<int>z;int sum,t,flag=0,shu=0;
 int main()
 {
 	string s;cin>>s;
 	for(int i=0;i<s.length();i++)
 	{
 		if(s[i]=='.')	
 		{
 			z.push(shu);
			shu=0;
			flag=0;	
		}
 		else if(s[i]>='0' and s[i]<='9' and flag==1)
		{
			t=s[i]-'0';
			shu=shu*10+t;
		}
		else if(s[i]>='0' and s[i]<='9')
		{
			t=s[i]-'0';
			shu+=t;
			flag=1;
		}
		else if(s[i]=='+')
		{
			sum=z.top();
			z.pop();
			sum+=z.top();
			z.pop();
			z.push(sum);

		}
		else if(s[i]=='-')
		{
			sum=z.top();
			z.pop();
			sum=z.top()-sum;
			z.pop();
			z.push(sum);

		}
		else if(s[i]=='*')
		{
			sum=z.top();
			z.pop();
			sum*=z.top();
			z.pop();
			z.push(sum);

		}
		else if(s[i]=='/')
		{
			sum=z.top();
			z.pop();
			sum=z.top()/sum;
			z.pop();
			z.push(sum);

		}
		else
		{
			cout<<z.top();
			break;
		}
		
	}
 }

P1160 队列安排 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

双向链表

还没完全搞明白。。

#include<bits/stdc++.h>
using namespace std;
struct node
{
	int pre,nxt,key;
	node(int _key=0,int _pre=0,int _nxt=0)
	{
		pre=_pre;nxt=_nxt;key=_key;
	}
	
};
node s[100005];
int n,m,tot=0,index1[100005]={0};
void ins_back(int x,int y)
{
	int now=index1[x];
	s[++tot]=node(y,now,s[now].nxt);
	s[s[now].nxt].pre=tot;
	s[now].nxt=tot;
	index1[y]=tot;
}
void ins_front(int x,int y)
{
	int now=index1[x];
	s[++tot]=node(y,s[now].pre,now);
	s[s[now].pre].nxt=tot;
	s[now].pre=tot;
	index1[y]=tot;
}
void del(int x)
{
	int now=index1[x];
	int le=s[now].pre,rt=s[now].nxt;
	s[le].nxt=rt;
	s[rt].pre=le;
	index1[x]=0;
}


int main()
{
	int x,k,p,now;
	cin>>n;
	s[0]=node();
	ins_back(0,1);
	
	for(int i=2;i<=n;i++)
	{
		cin>>k>>p;
		if(p) 
		{
			ins_back(k,i);
		}
		else
		{
			ins_front(k,i);
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x;
		if(index1[x])
		del(x);
		
	}
	now=s[0].nxt;
	while(now)
	{
		cout<<s[now].key<<' ';
		now=s[now].nxt;
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值