用C来写之前用STL的题目
https://www.luogu.com.cn/record/99399497
之前的
#include<bits/stdc++.h>
using namespace std;
int n,arr[35][35]={0},brr[35][35]={0},tmep;
struct point{
int x,y;
};
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
queue<point> q;
void intput()
{
brr[0][0]=1;
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
scanf("%d",&tmep);
if(tmep!=0)
arr[i][j]=1;
}
}
void print()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(arr[i][j]==0&&brr[i][j]==0)
printf("2 ");
else if(arr[i][j]==1)
printf("1 ");
else
printf("0 ");
}
printf("\n");
}
}
void judge()
{
q.push(point{0,0});
while(!q.empty())
{
point p=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int x=p.x+dx[i];
int y=p.y+dy[i];
if(x<0||x>n+1||y<0||y>n+1)
continue;
if(arr[x][y]==0&&brr[x][y]==0)
{
brr[x][y]=1;
q.push(point{x,y});
}
}
}
}
int main()
{
intput();
judge();
print();
return 0;
}
修改后的
#include<bits/stdc++.h>
using namespace std;
int m,arr[40][40],brr[40][40],tmep=0;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
void dfs(int x,int y){
for(int i=0;i<4;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(arr[tx][ty]==0&&brr[tx][ty]==0)
{
if(x<0||y<0||x>m+1||y>m+1)
continue;
brr[tx][ty]=1;
dfs(tx,ty);
}
}
}
int main(){
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
cin>>tmep;
if(tmep)
arr[i][j]=1;
}
}
dfs(0,0);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(arr[i][j]==0&&brr[i][j]==0)
printf("2 ");
else if(arr[i][j]==1)
printf("1 ");
else
printf("0 ");
}
puts(" ");
}
}
P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
修改前的
#include<bits/stdc++.h>
using namespace std;
struct point{
int x,y;
}tp,p;
int ans[405][405];
queue <point> q;
int dx[8]={-1,-2,-2,-1,1,2,2,1},dy[8]={-2,-1,1,2,2,1,-1,-2};
int main()
{
int n,m,x0,y0;
memset(ans,-1,sizeof(ans));
cin>>n>>m>>x0>>y0;
ans[x0][y0]=0;
tp={x0,y0};
q.push(tp);
while(!q.empty())
{
tp= q.front();
q.pop();
for(int i=0;i<8;i++)
{
int x=dx[i]+tp.x;
int y=dy[i]+tp.y;
if(x<1||x>n||y<1||y>m||ans[x][y]!=-1)
continue;
ans[x][y]=ans[tp.x][tp.y]+1;
p={x,y};
q.push(p);
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
}
修改后的
#include<bits/stdc++.h>
using namespace std;
struct arr
{
int x,y;
} point[161000];
int main()
{
int start=0,end=1,get[401][401],n,m,sx,sy;
int dx[8]={2,-2,2,-2,-1,1,-1,1},dy[8]={1,1,-1,-1,2,2,-2,-2};
cin>>n>>m>>sx>>sy;
point[1].x=sx;
point[1].y=sy;
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
get[i][j]=-1;
get[sx][sy]=0;
while(start<end)
{
start++;
int s=get[point[start].x][point[start].y]+1;
for(int i=0;i<8;++i)
{
int tx=point[start].x+dx[i],ty=point[start].y+dy[i];
if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&get[tx][ty]==-1)
{
end++;
point[end].x=tx;
point[end].y=ty;
get[tx][ty]=s;
}
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
printf("%-5d", get[i][j]);
puts(" ");
}
return 0;
}
P1596 [USACO10OCT]Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
修改前的
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0;
char arr[105][105];
int brr[105][105];
struct point{
int x,y;
};
int dx[8]={0,-1,-1,-1,0,1,1,1},dy[8]={-1,-1,0,1,1,1,0,-1};
queue<point> q;
void intput()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>arr[i][j];
}
void judge()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(arr[i][j]=='W'&&brr[i][j]==0)
{
ans++;
brr[i][j]=1;
q.push(point{i,j});
while(!q.empty())
{
point p=q.front();
q.pop();
for(int k=0;k<8;k++)
{
int x=p.x+dx[k];
int y=p.y+dy[k];
if(x<0||y<0)
continue;
if(arr[x][y]=='W'&&brr[x][y]==0)
{
brr[x][y]=1;
q.push(point{x,y});//
}
}
}
}
}
cout<<ans;
}
int main()
{
intput();
judge();
}
修改后的
#include<iostream>
#include<cstdio>
using namespace std;
int dx[9]={0,-1,-1,-1,0,0,1,1,1},dy[9]={0,-1,0,1,-1,1,-1,0,1};
int n,m,ans;
char arr[105][105];
void dfs(int x,int y)
{
int tx,ty;
for (int i=1;i<=8;i++)
{
tx=x+dx[i];
ty=y+dy[i];
if (tx<1||tx>n||ty<1||ty>m||arr[tx][ty]=='.')//判断是否出界
continue;
arr[tx][ty]='.';
dfs(tx,ty);
}
}
int main()
{
scanf("%d %d\n",&n,&m);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
cin>>arr[i][j];
}
ans=0;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=m;j++)
{
if (arr[i][j]=='W')
{
arr[i][j]='.';
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
return 0;
}
P4387 【深基15.习9】验证栈序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
修改前的
#include<bits/stdc++.h>
using namespace std;
int n;
int arr[100005],brr[100005];
void abc()
{
int n=0,now=0;
stack<int> s;
cin>>n;
for(int i=0;i<n;i++)
cin>>arr[i];
for(int i=0;i<n;i++)
cin>>brr[i];
for(int i=0;i<n;i++)
{
if(s.empty())
s.push(arr[now++]);
while(brr[i]!=s.top()&&now<n)
s.push(arr[now++]);
if(brr[i]==s.top())
s.pop();
else
{
cout<< "No"<<endl;
return ;
}
}
cout<< "Yes"<<endl;
}
int main()
{
int a;
cin>>a;
for(int i=0;i<a;i++)
{
abc();
}
}
修改后
#include<bits/stdc++.h>
using namespace std;
int top,arr[100010],n,intput[100010],output[100010],t;
int main()
{
scanf("%d",&t);
int len,js=1;
while(t--)
{
scanf("%d",&len);
for(int j=1;j<=len;j++)
scanf("%d",&intput[j]);
for(int j=1;j<=len;j++)
scanf("%d",&output[j]);
for(int j=1;j<=len;j++)
{
arr[++top]=intput[j];
while(arr[top] == intput[js] && arr[top] && output[js]) {
top--;
js++;
}
}
if(top != 0)
puts("No");
else
puts("Yes");
top=0;
js=1;
}
return 0;
}