题目:I题
在涂鸦大师 gjlccc 眼中,世界是一个n×n 的矩阵,由n×n 个格子组成,左上角为 (1, 1),右下角为 (n, n)。为了方便涂色,gjlccc 做出了涂色的规划,并且颜色都暂时被 gjlccc 用小写字母来替代,后涂色的会覆盖之前的颜色。
在一开始,gjlccc 会告诉你世界有多大,也就是 n 的值。
n×n的矩阵中所有初始颜色都是字符 a。
请你帮涂鸦大师 gjlccc 快速解决这个问题,给世界颜色。
输入描述:
第一行一个正整数 n(1≤n≤1000),表示矩阵大小。
第二行一个正整数 q(1≤q≤1000),表示操作次数。
接下来 qqq 行,每行描述一个操作。
1 a b,对第 a(1≤a≤n)行的格子都涂上颜色 b。
2 a b,对第 a(1≤a≤n) 列的格子都涂上颜色 b。
3 c b,设 i(1≤i≤n) 为行号 j(1≤j≤n)为列号,对所有满足 (i+j)=c(2≤c≤2n) 的格子都涂上颜色 b。
4 d b,设 i(1≤i≤n) 为行号 j(1≤j≤n) 为列号,对所有满足 (i−j)=d(1−n≤d≤n−1)的格子都涂上颜色 b。
5 a,查询当前的矩阵第 a(1≤a≤n)行的颜色。
保证矩阵颜色均为小写字母。
样例输入:
5
9
5 1
1 5 b
5 2
2 5 c
5 3
3 6 d
5 4
4 0 e
5 5
样例输出:
aaaaa
aaaaa
aaaac
adaac
dbbbe
解题:
定义全局变量和矩阵:
char mp[1010][1010];
memset(mp,'a',sizeof(mp));//将矩阵中所有元素初始化为字符 'a',即初始颜色为 'a'。
n:矩阵的大小。
q:操作的次数。
x:当前操作的类型。
y:当前操作的参数。
s:当前操作的颜色。
根据操作类型 x 的不同,执行不同的操作:
操作类型为 1、2、3、4 时,分别对应对行、列、对角线和反对角线进行涂色。具体操作如下:对行进行涂色:遍历该行的所有格子,将其颜色修改为给定的颜色 s。
对列进行涂色:遍历该列的所有格子,将其颜色修改为给定的颜色 s。
对角线进行涂色:遍历矩阵中的每个格子,如果其行号和列号之和等于给定的值 y,则将其颜色修改为给定的颜色 s。
反对角线进行涂色:遍历矩阵中的每个格子,如果其行号减去列号等于给定的值 y,则将其颜色修改为给定的颜色 s。
操作类型为 5 时,查询某一行的颜色,并输出结果。
AC代码:
#include<bits/stdc++.h>//万能头文件
using namespace std;
char mp[1010][1010];
int main()
{
int n,q,x,y;
char s;
cin>>n;
cin>>q;
memset(mp,'a',sizeof(mp));
for(int z=0;z<q;z++)
{
cin>>x;
if(x==1){
cin>>y>>s;
for(int i=1;i<=n;i++)
{
mp[y][i]=s;
}
}
else if(x==2){
cin>>y>>s;
for(int i=1;i<=n;i++)
{
mp[i][y]=s;
}
}
else if(x==3){
cin>>y>>s;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((i+j)==y) mp[i][j]=s;
}
}
}
else if(x==4){
cin>>y>>s;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if((i-j)==y) mp[i][j]=s;
}
}
}
else if(x==5){
cin>>y;
for(int i=1;i<=n;i++)
{
cout<<mp[y][i];
}
cout<<endl;
}
}
return 0;
}