寄存柜
#include <bits/stdc++.h>
using namespace std;
map<int,map<int,int> > a;
int main(){
int n,q,x,y,k,z;
cin>>n>>q;
for(int i=1;i<=q;++i){
cin>>k>>x>>y;
if(k==1){
cin>>z;
a[x][y]=z;
}
else{
cout<<a[x][y]<<endl;
}
}
return 0;
}
括号序列
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[105];
string s;
cin>>s;
int len=s.length();
int i,j;
for(i=0;i<len;i++){
a[i]=0;
}
for(i=0;i<len;i++){
if(s[i]==')'){
for(j=i-1;j>=0;j--){
if(s[j] == '(' && a[j] == 0){
a[i]=a[j]=1;
break;
}
else if (s[j] == '[' && a[j] == 0) break;
}
}
else if(s[i]==']'){
for(j=i-1;j>=0;j--){
if(s[j] == '[' && a[j] == 0){
a[i]=a[j]=1;
break;
}
else if (s[j] == '(' && a[j] == 0) break;
}
}
}
for (i=0; i<s.length(); i++) {
if (a[i] == 0) {
if (s[i] == '(' || s[i] == ')') cout << "()";
else cout << "[]";
}
else cout << s[i];
}
return 0;
}
从左往右找“右括号”,找到后跟其左边最近的“左括号”匹配,如若匹配上,a[i]=1,最后在输出s[i]时为所有a[i]=0的s[i]补全括号
后缀表达式
#include <bits/stdc++.h>
using namespace std;
stack<int> n;
char ch;
int s,x,y;
int main()
{
while(ch!='@')
{
ch=getchar();
switch(ch)
{
case '+':x=n.top();n.pop();y=n.top();n.pop();n.push(x+y);break;
case '-':x=n.top();n.pop();y=n.top();n.pop();n.push(y-x);break;
case '*':x=n.top();n.pop();y=n.top();n.pop();n.push(x*y);break;
case '/':x=n.top();n.pop();y=n.top();n.pop();n.push(y/x);break;
case '.':n.push(s);s=0;break;
default :s=s*10+ch-'0';break;
}
}
cout<<n.top();
return 0;
}
用stack。
队列安排
#include <bits/stdc++.h>
using namespace std;
const int mx=1e5+10;
int n,m;
struct T{
int l,r;
int d;
}t[mx]={0};
void add(int i,int k,int f)
{
if(f==1)
{
t[k].r=t[i].r;
t[k].l=i;
t[i].r=k;
t[t[k].r].l=k;
}
else
{
t[k].r=i;
t[k].l=t[i].l;
t[i].l=k;
t[t[k].l].r=k;
}
}
int main()
{
int x,k,f;
cin>>n;
t[0].r=0,t[0].l=0;
add(0,1,1);
for (int i=2;i<=n;i++)
{
cin>>x>>f;
add(x,i,f);
}
cin>>m;
while(m--)
{
cin>>x;
t[x].d=1;
}
for (int i=t[0].r;i;i=t[i].r)
{
if (t[i].d==0)
cout<<i<<" ";
}
return 0;
}