大家好,我是泡泡,今天给大家带来复习的内容,因为复习,所以一带而过啦
目录
一丶平方序列
题目要求:
小明想找到两个正整数 XX 和 YY,满足
- 2019<X<Y;
- 2019^2, X^2, Y^2 组成等差数列。
请你求出在所有可能的解中,X + YX+Y 的最小值是多少?
解题思路:
暴力
#include<bits/stdc++.h>
using namespace std;
int main()
{
for(int i=2020;i<10001;i++)
{
int x = i*i*2-2019*2019;
int y = sqrt(x);
if(y*y==x)
{
cout<<i+y;
return 0;
}
}
}
二丶穿越雷区
题目要求:
X 星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
某坦克需要从 A 区到 B 区去( A,B 区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
已知的地图是一个方阵,上面用字母标出了 A,B 区,其它区都标了正号或负号分别表示正负能量辐射区。
例如:
A + - + -
- + - - +
- + + + -
+ - + - +
B + - + -
坦克车只能水平或垂直方向上移动到相邻的区。
解题思路:
BFS模板哦
#include<bits/stdc++.h>
using namespace std;
const int N = 101;
char s[N][N];
int dx,dy,tx,ty,n;
int ddx[]={1,0,0,-1};
int ddy[]={0,1,-1,0};
int vis[N][N];
struct node{
int x,y,t;
char b;
};
int bfs()
{
vis[dx][dy] = 1;
queue<node>q;
q.push({dx,dy,0,'r'});
while(q.size())
{
node z = q.front();
q.pop();
if(z.x==tx&&z.y==ty)
{
return z.t;
}
for(int i=0;i<4;i++)
{
int x = z.x+ddx[i];
int y = z.y+ddy[i];
if(!vis[x][y]&&x>0&&y>0&&x<=n&&y<=n&&s[x][y]!=z.b)
{
q.push({x,y,z.t+1,s[x][y]});
vis[x][y] = 1;
}
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>s[i][j];
if(s[i][j]=='A')
{
dx=i;
dy=j;
}
if(s[i][j]=='B')
{
tx=i;
ty=j;
}
}
}
cout<<bfs();
return 0;
}