首页 > 其他分享 >P4327题解

P4327题解

时间:2023-08-25 22:11:31浏览次数:42  
标签:.. #.#. 题解 .# .#.. P4327 .#.#. con

思路

分组计算
以下图为例:

..#.. .#.. .*.. .#..
.#.#. #.#. *.*. #.#.
#.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

相关文章

  • 牛客练习赛114 D题题解
    比赛编号太臭了题目链接对一第一组数据,我们形象化的得到下图:如何拆解使其变成一个“顺子”呢,我们像这样:贪心的从后往前取,对于取数列时的终点也就是枚举的起点如果不为0,就向前一直取,如果取到一个数\(x\)发现这个数的个数\(num_x\)是大于\(num_{x-1}\)的,就停止,最后看拆......
  • P9166题解
    简单题,但是我考场写炸了。\(100\rightarrow70\)。我们读入的时候,先开两个数组\(ls,rs\)来记录当前这个点是否为某条线段左端点或右端点。我们发现,每一条线段都是连续的,因此可以直接差分记录当前这个点能否走到。然后你提交上去发现你能过。实际上这种做法是假的。为什么呢?......
  • ABC296D题解
    简单题。考虑-1的情况,即为\(n^2<m\)。剩下暴力枚举\(a\)即可。上限为\(\sqrt{m}+1\)。注意要\(+1\),因为上取整(本人赛时被这个罚了很多次)。可以由\(m\)和\(a\)确定\(b\)的最小值,即\(b=\lceil\frac{m}{a}\rceil\)。注意卡longlong以及\(a,b\)的最大值不能超......
  • AT_donuts_2015_3 题解
    根据题意,发现我们要维护一个身高递减的序列。因此,我们可以直接使用单调栈维护第\(i\)个人能看到的人数即可。答案就是当前栈内的元素数量。注意应先输出答案再将当前高度入栈。#include<cstdio>intn;inth[100010];intst[100010];inttop;intmain(){ scanf("%d",&......
  • ABC020C题解
    本题二分+搜索。我们可以先二分出\(x\)可能的值,再用搜索检验这个答案是否满足要求。若满足,左端点右移,否则右端点左移。至于搜索可以用记搜加速。注意输出要换行,否则会WA。#include<cstdio>#include<cstring>intn,m,t;charmap[20][20];intsx,sy;intex,ey;longl......
  • CF498A题解
    简单解析几何。做这道题之前,你需要知道:根据两点求直线一般式。根据两条直线求交点坐标。这里直接丢公式了,百度上也有证明过程,自己推导难度也不大。若两点坐标为\((x_1,y_1),(x_2,y_2)\),则直线方程为:\(Ax+By+C=0\),其中\(A=y_2-y_1,B=x_1-x_2,C=x_2y_1-x_1y_2\)。......
  • UVA10192题解
    为了尽可能满足父母亲的要求,我们应该取两个字符串的最长公共子序列。洛谷模板题设\(dp_{i,j}\)为\(a\)串匹配到第\(i\)位,\(b\)串匹配到第\(j\)位时的最长公共子序列长度。则易知\(dp_{i,j}\)可以由\(dp_{i-1,j}\)和\(dp_{i,j-1}\)转移过来。如果\(a_{i}=b_{j}......
  • CF1673A的题解
    好久没做CF的水题了由于每一个人都以最佳策略进行游戏且Alice先手。设字符串长度为\(|s|\)。我们可以考虑:\(|s|\)为偶数,此时Alice可以直接全部取走,不给Bob任何机会(人心险恶啊)。\(|s|\)为奇数,此时Alice最多取\(|s|-1\)个字符,也就剩下头和尾。对比头和尾,哪一个大就......
  • CF1674C的题解
    有意思的题目。还是比较好想的。先考虑-1的情况,可以想到,如果\(t\)的长度不为\(1\),并且\(t\)里面还有a的话,那么这个新的a又能被下一个\(t\)替换,无限套娃。剩下的,还是有两种情况:如果\(t\)只有一个字符a,那么\(s\)无论怎么被替换都是一样的(全部都是a),所以,这......
  • CF1674B的题解
    很简单的题可以先初始化一下,把所有单词放进一个map里,最后输入时用map映射即可。一个坑点,注意每一个单词的两个字母不相同。#include<cstdio>#include<map>#include<string>#include<iostream>usingnamespacestd;map<string,int>mp;voidinit(){ intindex=0;......