传智专修学院举办了一场游园活动,其中一个非常重要的环节就是收集印章。集章卡是一张高度宽度分别为 h,w(20<=h<=1000,50<=w<= 2000)的白纸。初始情况下每个单位像素都是由 . 来填充(代表白色)。
现在小 A 在一个摊位上盖章。由于小 A 很喜欢这个摊位印章的样式,所以他会连续盖上 n(1<=n<=2000) 次印。这个印章是宽 50、高 20 的图形,是这样:
...........................,]]OOO@@@@OOO]`........
....................,]OO@@@@@@@@@@@@@@@@@@@@O`....
................./O@@@@@@@@@@@@@@@@@@@@@@@@@@@@^..
............../O@@@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@.
..........,@@@@@@@@@@O/[.............[O@@@@@@@\
........,O@@@@@@@@@@O/`..................,O@@@@@@O
.......O@@@@@@@@@O`......]OO@@@O\`........O@@@@@@@
.....,O@@@@@@@@/`.....]O@@@@@@@@@@^.......O@@@@@@@
...,@@@@@O/.....@@@@@@@@@@@@O......@@@@@0
..=@@@@@@@O`.....@@@@@@@@@@@@@@^.....O@@@@@@@O.
.@@@@@/......O@@@@@@@@@@@@@@@O`....@@@@@@O..
=@@@@@@@O......O@@@@@@@@@@@@@@@^....O@@@@@@@@@O...
O@@@@@@@^.....=@@@@@@@@@@@@@O[....@@@@@@@O`....
@@@@@@@O.......\@@@@@@@@O[...../O@@@@@@@@@O`......
@@@@@@@@^.........[`.......]OO@@@@@@@@@@O`........
O@@@@@@@@O\............]@@@@@@@@@@O/...........
=@@@@@@@OOOoo`........O@@@@@@@@@@@@/`.............
..\OOOOO*,`*..........O@@@@@@@@@O`................
.....,[[..............O@@@@@@O`...................
......................O@@@@@@O....................
由于盖章时手不太稳,所以盖章时也有可能会使这个图样旋转 180°(当然不同的字符只代表不同的颜色,字符本身不需要翻转)。
现在已经知道了小 A 的 n 次盖章信息,包括左上角坐标 x,y,和旋转方式 r。也就是说,这个图样旋转后的左上角,位于集章卡的第 x 行 y 列的位置,集章卡的左上角坐标是 (0,0)。
需要特别注意的是,后盖的印章可能和之前改的印章重叠。后盖的章有颜色的部分(不是 . 的部分)会覆盖之前印上的图形。
第一行三个整数 n,h,w 代表印章次数,代表集章卡的高度和宽度。
接下来 n 行,每行三个整数 x,y,r,描述每次盖章的信息。其中 (x,y)是图样(旋转后)左上角的坐标,r(0<= r <=1) 代表旋转方式,代表图样顺时针旋转 r*180°,保证印章的图案至少有一部分在集章卡内部。
输出一个高度为 h,宽度为 w 的字符矩阵,表示全部盖印后的集章卡的样子。评测时会忽略行末空格和输出文件末尾的回车。
2 37 70
2 2 0
15 18 1
......................................................................
......................................................................
.............................,]]OOO@@@@OOO]`..........................
......................,]OO@@@@@@@@@@@@@@@@@@@@O`......................
.................../O@@@@@@@@@@@@@@@@@@@@@@@@@@@@^....................
................/O@@@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@...................
............,/@@@@@@@@@@@@O/[.............[O@@@@@@@\..................
..........,O@@@@@@@@@@O/`..................,O@@@@@@O..................
.........O@@@@@@@@@O`......]OO@@@O\`........O@@@@@@@..................
.......,O@@@@@@@@/`.....]O@@@@@@@@@@^.......O@@@@@@@..................
.....,/@@@@@@@O/...../@@@@@@@@@@@@@@O....../@@@@@@@0..................
....=@@@@@@@O`...../@@@@@@@@@@@@@@@@^.....O@@@@@@@O...................
.../@@@@@@@/......O@@@@@@@@@@@@@@@O`..../@@@@@@@@O....................
..=@@@@@@@O......O@@@@@@@@@@@@@@@^....O@@@@@@@@@O.....................
..O@@@@@@@^.....=@@@@@@@@@@@@@O[..../@@@@@@@@@O`......................
..@@@@@@@O.......\@@@@@@@@O[...../O@@@O@@@@@@O........................
..@@@@@@@@^.........[`.......]OO@@@@@`O@@@@@@O..............[[,.......
..O@@@@@@@@O\............]/@@@@@@@`O@@@@@@@@@O..........*`,*OOOOO\....
..=@@@@@@@OOOoo`........O@@@@@@`/@@@@@@@@@@@@O........`ooOOO@@@@@@@=..
....\OOOOO*,`*..........O@@@@/O@@@@@@@@@@@@/]............\O@@@@@@@@O..
.......,[[..............O@`O@@@@@@@@@@OO].......`[.........^@@@@@@@@..
........................`O@@@@@@@@@O/.....[O@@@@@@@@\.......O@@@@@@@..
......................`O@@@@@@@@@/....[O@@@@@@@@@@@@@=.....^@@@@@@@O..
.....................O@@@@@@@@@O....^@@@@@@@@@@@@@@@O......O@@@@@@@=..
....................O@@@@@@@@/....`O@@@@@@@@@@@@@@@O....../@@@@@@@/...
...................O@@@@@@@O.....^@@@@@@@@@@@@@@@@/.....`O@@@@@@@=....
..................0@@@@@@@/......O@@@@@@@@@@@@@@/...../O@@@@@@@/,.....
..................@@@@@@@O.......^@@@@@@@@@@O].....`/@@@@@@@@O,.......
..................@@@@@@@O........`\O@@@OO]......`O@@@@@@@@@O.........
..................O@@@@@@O,..................`/O@@@@@@@@@@O,..........
..................\@@@@@@@O[.............[/O@@@@@@@@@@@@/,............
...................@@@@@@@@@@@OOOOOOO@@@@@@@@@@@@@@@O/................
....................^@@@@@@@@@@@@@@@@@@@@@@@@@@@@O/...................
......................`O@@@@@@@@@@@@@@@@@@@@OO],......................
..........................`]OOO@@@@OOO]],.............................
......................................................................
......................................................................
一道字符串的模拟,没啥思维量,但是有一些需要注意的地方
1.就是怎么把这个印章存起来,在这卡了好一会,还要注意转义的\。
2.怎么排除在界外的情况:就是更新ans字符数组的时候要加一个判断,如果要赋的值在外边,就不赋。
#include
using namespace std;
char s[20][51]={
"...........................,]]OOO@@@@OOO]`........",
"....................,]OO@@@@@@@@@@@@@@@@@@@@O`....",
"................./O@@@@@@@@@@@@@@@@@@@@@@@@@@@@^..",
"............../O@@@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@.",
"..........,/@@@@@@@@@@@@O/[.............[O@@@@@@@\\",
"........,O@@@@@@@@@@O/`..................,O@@@@@@O",
".......O@@@@@@@@@O`......]OO@@@O\\`........O@@@@@@@",
".....,O@@@@@@@@/`.....]O@@@@@@@@@@^.......O@@@@@@@",
"...,/@@@@@@@O/...../@@@@@@@@@@@@@@O....../@@@@@@@0",
"..=@@@@@@@O`...../@@@@@@@@@@@@@@@@^.....O@@@@@@@O.",
"./@@@@@@@/......O@@@@@@@@@@@@@@@O`..../@@@@@@@@O..",
"=@@@@@@@O......O@@@@@@@@@@@@@@@^....O@@@@@@@@@O...",
"O@@@@@@@^.....=@@@@@@@@@@@@@O[..../@@@@@@@@@O`....",
"@@@@@@@O.......\\@@@@@@@@O[...../O@@@@@@@@@O`......",
"@@@@@@@@^.........[`.......]OO@@@@@@@@@@O`........",
"O@@@@@@@@O\\............]/@@@@@@@@@@@@O/...........",
"=@@@@@@@OOOoo`........O@@@@@@@@@@@@/`.............",
"..\\OOOOO*,`*..........O@@@@@@@@@O`................",
".....,[[..............O@@@@@@O`...................",
"......................O@@@@@@O...................."
};
char t[20][50];
char ans[2010][4010];
int n,h,w;
int main(){
for(int i=0;i<20;i++){
for(int j=0;j<50;j++){
t[i][j]=s[19-i][49-j];
}
}
scanf("%d %d %d",&n,&h,&w);
for(int i=0;i<h;i++){
for(int j=0;j<w;j++)
ans[i][j]='.';
}
while(n--){
int x,y,r;
scanf("%d %d %d",&x,&y,&r);
if(r%2==0){
for(int i=0;i<=19;i++){
for(int j=0;j<=49;j++){
if(x+i>=0&&y+j>=0&&x+i<h&&y+j<w&&s[i][j]!='.')
ans[x+i][y+j]=s[i][j];
}
}
}else{
for(int i=0;i<=19;i++){
for(int j=0;j<=49;j++){
if(x+i>=0&&y+j>=0&&x+i<h&&y+j<w&&t[i][j]!='.')
ans[x+i][y+j]=t[i][j];
}
}
}
}
for(int i=0;i<h;i++){
for(int j=0;j<w;j++){
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}