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;
}
}