2021.8.13提高B组模拟5T1 Brothers(暴力)
Posted SSL_LKJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.13提高B组模拟5T1 Brothers(暴力)相关的知识,希望对你有一定的参考价值。
Brothers
题目大意
在遥远的西方有一个古老的王国,国王将他的王国分成了网格状,每一块称之为一个城市。在国王临死前,他将这些城市分给了自己的N个儿子(编号为0到N-1)。然而这N个王子的关系不是很好,0讨厌1,1讨厌2,2讨厌3……N-1讨厌0。
在国王死后,这种不好的关系使得王子之间爆发了战争。战斗只会在相邻的两个城市之间爆发(共有一条边称之为相邻),并且只有当A讨厌B时,A才会对B发起战斗,结果必定是A获得这次战斗的胜利。当一方胜利后,他所进攻的城市就会变成进攻方的。许多战斗是同时发生的,我们称之为一场战役。当多场战役发生之后,剩下的王子将不再发生战争。
例如,如果有3个王子,那么战斗过程如下所示:
输入样例
第一行输入4个数,N,R,C,K。有N个王子,王国分为R*C的网格图。询问K场战役之后的城市归属图。
下面R行,每行C个数字,表示一开始城市的归属。
1.
3 4 4 3
0 1 2 0
1 0 2 0
0 1 2 0
0 1 2 2
2.
4 2 3 4
1 0 3
2 1 2
3.
8 4 2 1
0 7
1 6
2 5
3 4
输出样例
R行C列,表示K场战役之后的城市归属图。
1.
2 2 2 0
2 1 0 1
2 2 2 0
0 2 0 0
2.
1 0 3
2 1 2
3.
7 6
0 5
1 4
2 3
题目数据
2<=N<=100
2<=R,C<=100
1<=K<=100
保证数据合法
解题思路
就是暴力,记得存储转移
AC代码
#include<cstdio>
using namespace std;
int n,r,c,K,a[105][105],b[105][105];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
bool check(int x,int y)
{
if(x>=1&&x<=r&&y>=1&&y<=c)return true;
return false;
}
int main()
{
scanf("%d%d%d%d",&n,&r,&c,&K);
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
scanf("%d",&a[i][j]);
for(int k=1;k<=K;k++)
{
for(int i=1;i<=r;i++)//赋值
for(int j=1;j<=c;j++)
b[i][j]=a[i][j];
for(int i=1;i<=r;i++)//暴力
for(int j=1;j<=c;j++)
for(int xx=0;xx<4;xx++)
{
int x=dx[xx]+i,y=dy[xx]+j;
if(check(x,y))
if((a[i][j]+1)%n==a[x][y])
b[x][y]=a[i][j];
}
for(int i=1;i<=r;i++)//赋值
for(int j=1;j<=c;j++)
a[i][j]=b[i][j];
}
for(int i=1;i<=r;i++,printf("\\n"))
for(int j=1;j<=c;j++)
printf("%d ",a[i][j]);
return 0;
}
谢谢
以上是关于2021.8.13提高B组模拟5T1 Brothers(暴力)的主要内容,如果未能解决你的问题,请参考以下文章
2021.8.13提高B组模拟5T2 Crisis(小根堆)