思路
分组计算
以下图为例:
..#.. .#.. .*.. .#..
.#.#. #.#. *.*. #.#.
#.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]='#';
}
标签:..,#.#.,题解,.#,.#..,P4327,.#.#.,con
From: https://www.cnblogs.com/lmy20111226/p/17658050.html