2.走迷宫bfs
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=1010;
int n,m,x;//n行m列,x代表不能走的点的个数
int sx,sy,tx,ty;//起点终点
int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1};//从上方向逆时针定义四个偏移量,其他也行,前后对上就可以
int g[N][N];//存放地图
int dist[N][N];//存放起点到每一个点的距离
map<int,int>p;
void bfs()
{
queue<PII>q;
q.push({sx,sy});
dist[sx][sy]=0;//表示起点被走过了
while(!q.empty())
{
auto t=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int x=t.first+dx[i],y=t.second+dy[i];
int tmp=dist[t.first][t.second]+1;//
if(x<0||x>=n||y<0||y>=m||g[x][y]==1||dist[x][y]<tmp) continue;
dist[x][y]=min(dist[x][y],tmp);
//dist表示当前点离起点的最短距离,tmp代表从队列中取出的点的距离
if(x==tx&&y==ty)
{
p[tmp]++;
break;
}
q.push({x,y});
}
}
}
int main()
{
cin>>n>>m>>sx>>sy>>tx>>ty>>x;
//n行m列,sx,sy表示起点,tx,ty表示终点,x代表不能走的点的个数
while(x--)//把障碍物坐标搞定
{
int a,b;
cin>>a>>b;//障碍物的坐标输入
g[a][b]=1;//所以障碍区标记为1
}
memset(dist,0x3f,sizeof dist);
bfs();
cout<<p[dist[tx][ty]]<<' '<<dist[tx][ty]<<endl;
return 0;
}
1.模拟题
记录两个芯片
a芯片是4,不到4就一直加就行,
然后进行判别
如果当前cnt1<cnt2的话说明a比b小,那么a的数量应该在b的基础上加1,因为b的口已经用过了,不能给a
同理,cnt1>cnt2的话,a比b大,说明b没占a的资源,a自己卷+1;
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
vector<char>k;
char x;
int main()
{
cin>>m>>n;
int cnt1,cnt2;
int cnt=0;
int num=1;
for(int i=0;i<n;i++)
{
cin>>x;
k.push_back(x);
}
bool flag=true;
if(k[0]=='A')
{
cnt1=1;
cnt2=0;
}
else
{
cnt2=1;
cnt1=0;
}
for(int i=0;i<n;i++)
{
if(k[i]=='A')
{
if(cnt<4) cnt++;
else
{
if(cnt1<cnt2&&cnt2<m) cnt1=cnt2+1;
else if(cnt1>cnt2&&cnt1<m) cnt1++;
else
{
flag=false;
break;
}
cnt=0;
}
}
else
{
if(cnt2<cnt1&&cnt1<m) cnt2=cnt1+1;
else if(cnt2>cnt1&&cnt2<m) cnt2++;
else
{
flag=false;
break;
}
}
}
if(flag==false) cout<<0<<endl<<0<<endl;
else if(k[k.size()-1]=='A') cout<<cnt1<<endl<<cnt<<endl;
else cout<<cnt2<<endl<<cnt<<endl;
}