今天是写题的一天,主要写了两个题下面附上题目跟代码
1.P4387
# 【深基15.习9】验证栈序列
## 题目描述
给出两个序列 pushed 和 poped 两个序列,其取值从 1 到 $n(n\le100000)$。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出 `Yes`,否则输出 `No`。为了防止骗分,每个测试点有多组数据。
## 输入格式
第一行一个整数 $q$,询问次数。
接下来 $q$ 个询问,对于每个询问:
第一行一个整数 $n$ 表示序列长度;
第二行 $n$ 个整数表示入栈序列;
第三行 $n$ 个整数表示出栈序列;
## 输出格式
对于每个询问输出答案。
## 样例 #1
### 样例输入 #1
```
2
5
1 2 3 4 5
5 4 3 2 1
4
1 2 3 4
2 4 1 3
```
### 样例输出 #1
```
Yes
No
```
代码
#include<iostream>
#include<stack>
using namespace std;
const int maxl=100000;
int a[maxl],b[maxl];
stack<int>sta;
int main()
{
int n,x;
cin>>x;
for(int i=0;i<x;i++)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
int pos=1;
for(int i=1;i<=n;i++)
{
sta.push(a[i]);
while(!sta.empty()&&sta.top()==b[pos])
{
sta.pop();
pos++;
}
}
cout<<(sta.empty()?"Yes":"No")<<endl;
while(!sta.empty())sta.pop();
}
return 0;
}
2.P1605迷宫
# 迷宫
## 题目描述
给定一个 $N \times M$ 方格的迷宫,迷宫里有 $T$ 处障碍,障碍处不可通过。
在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。
给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。
## 输入格式
第一行为三个正整数 $N,M,T$,分别表示迷宫的长宽和障碍总数。
第二行为四个正整数 $SX,SY,FX,FY$,$SX,SY$ 代表起点坐标,$FX,FY$ 代表终点坐标。
接下来 $T$ 行,每行两个正整数,表示障碍点的坐标。
## 输出格式
输出从起点坐标到终点坐标的方案总数。
## 样例 #1
### 样例输入 #1
```
2 2 1
1 1 2 2
1 2
```
### 样例输出 #1
```
1
```
## 提示
对于 $100\%$ 的数据,$1 \le N,M \le 5$,$1 \le T \le 10$,$1 \le SX,FX \le n$,$1 \le SY,FY \le m$。
代码
#include<bits/stdc++.h>
using namespace std;
int n,m,t,fx,fy,sx,sy,a[10][10]={0},anw=0;
int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
void migon(int x,int y)
{
if(x==sx&&y==sy){
anw++;
return;
}
for(int i=0;i<4;i++)
{
if(a[x+dx[i]][y+dy[i]]==1)
{
a[x+dx[i]][y+dy[i]]=0;
migon(x+dx[i],y+dy[i]);
a[x+dx[i]][y+dy[i]]=1;
}
}
}
int main()
{
int x,y;
cin>>n>>m>>t;
cin>>fx>>fy>>sx>>sy;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i][j]=1;
}
}
for(int i=1;i<=t;i++)
{
cin>>x>>y;
a[x][y]=0;
}
a[fx][fy]=0;
migon(fx,fy);
cout<<anw;
return 0;
}
总结一下,我感觉可能对于看视频来说做题更容易让我进步,比如在做题中我就学到了#的定义# include<stack>,和里面的输入cin输出cout以及删除pop。以及迷宫一类题目的具体操作。每天进步一点点,加油!