牛客网 wyh的矩阵(找规律) + wyh的迷宫(bfs)
程序员文章站
2024-03-17 23:19:04
...
【题目】
【分析】
一开始直接开始敲代码了果然超时了哭哭。仔细观察,头尾结合为中间的两倍。
以5为例,(5*5/2+1)为中心数13(我就是随便叫叫),答案为13*(1+3+5+3+1)=13*13.
有了答案为中心数平方的猜想,但是我们不能胡来嘛。个数推导一下为(1+n)/2*(1+n)/2*2-n=(n*n+1)/2.
因为n为奇数嘛,所以二者相等就可以直接写啦。短的一批,这就很有灵性。
【代码】
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t,n;
cin>>t;
while(t--){
cin>>n;
long long mid=n*n/2+1;
cout<<mid*mid<<endl;
}
return 0;
}
【题目】
【代码】
#include<bits/stdc++.h>
using namespace std;
const int dx[]={-1,0,1,0};
const int dy[]={0,1,0,-1};
char c[505][505];
int visit[505][505];
int n,m,re;
void bfs(int x,int y)
{
visit[x][y]=1;
if(c[x][y]=='t'){
re=1;
return;
}
for(int i=0;i<4;i++){
int x1=x+dx[i];
int y1=y+dy[i];
if(x1>=0&&y1>=0&&x1<n&&y1<m&&visit[x1][y1]==0&&c[x1][y1]!='x')
bfs(x1,y1);
}
}
int main()
{
int t,i,j;
cin>>t;
while(t--){
cin>>n>>m;
memset(c,'\0',sizeof(c));
memset(visit,0,sizeof(visit));
re=0;
for(i=0;i<n;i++){
getchar();
scanf("%s",c[i]);
}
int p,q;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(c[i][j]=='s'){
p=i;
q=j;
break;
}
bfs(p,q);
if(re==1)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}