思路

分组计算
以下图为例:

..#.. .#.. .*.. .#..
.#.#. #.#. *.*. #.#.
#.X.# .X.* .X.* .X.#
.#.#. #.#. *.*. #.#.
..#.. .#.. .*.. .#..

我们可以发现每个图形的第1、2、4、5排均是同样的图形,可我们仔细观察第3排:
#.X.# .X.* .X.* .X.#

只有第一个图形是完整的(或者说对称)附图:#.X.#

我们可以给定一个“模子”,也就是一个完整的图形,用它来处理每个图形,再局部修改一下即可。

但题目中说有两种框架(彼得·潘和温迪),出现的时机与它的序数相关,那我们就将情况分为两种:

  • 模3后不等于2(彼得·潘框架)。
con[0]+=".#..";
con[1]+="#.#.";
if (con[2][con[2].size()-1]=='#')
{
	con[2]+=".";
	con[2]+=a[i];
	con[2]+=".*";
}
else 
{
	con[2]+=".";
	con[2]+=a[i];
	con[2]+=".#";
}
con[3]+="#.#.";
con[4]+=".#..";
  • 模3后等于2(温迪框架)。
con[0]+=".*..";
con[1]+="*.*.";
con[2]+=".";
con[2]+=a[i];
con[2]+=".*";
con[3]+="*.*.";
con[4]+=".*..";

“模子”:

string con[5]=
{   
	"..#..",
	".#.#.",
	"#...#",
	".#.#.",
	"..#.."
};

最后我们得考虑一种状态:

  • 一旦最后出现了“模3后等于2”的状况,也就是温迪框架,那么注意最后一个字符是“*”
if(a.size()%3==2)
{
	con[2][a.size()*4]='#';
}