第十四次总结

用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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值