题目大意

构造一条闭合路线,使得路线不能相交,并且走直线的步数小于等于 S,转弯(左转和右转)的步数小于等于 T。(0≤S,T≤1000)

求一条最长的路线

做法分析

注意到,因为要求路线闭合,那么转弯的数量 T 必须大于等于 4,否则无解。

适当 YY 下:只能用偶数个 S 和偶数个 T,不然不可能构成闭合路径。怎么证明,不会...

情况1:S<2

这种情况下,我们不能使用直走的命令,只能通过不断的转弯来实现题目要求的路径,在纸上画了画,大致图形如下:

T=4 时:   T=8:没有   T=12:    T=16: ?

仔细观察 T=4 时候的图形和 T=12 时的图形,看能不能把 T=4 的时候的图形添加进 T=12 时的图形中,构成 T=16 时的图形?

仔细想想之后...

下面是我的构造方法:,当然,还有其他的方法,不过都大同小异

知道了怎么由 T=12 构造 T=16 的情况,不难得到由 T=16 构造 T=20 的方法,以及之后的构造方法

       不难得到 T≥12 时,构造的通项公式:RLLRLL(RL)xRLLRLL(RL)x   其中, x=(T-12)/4

       当 T<12 时,只有一种情况:LLLL

至此,情况1已经解决

情况2:S≥2

这种情况下,我们需要使用 S 来走直线,具体是怎么做呢?

首先需要 4 个 LLLL 使路径有成为闭合路径的可能。还剩下 [(T-4)/2]*2 的弯要转,为了让转弯之后扔然保持原来的运动方向,我把 LR 捆在一起,即左转和右转配合。首先令:x=(T-4)/2,表示有几对 LR,然后再分类讨论:

1、x 是偶数

不难想到,我可以先直着走,再走 LR,再转弯,到达另一边,再直着走,再转弯到达第三边,然后直着走,接着走 LR,再转弯,到达第四边,直着走,再转弯,回到出发点。如果路径严格对称的话,中间肯定不相交。怎么保证能够回到出发点呢构成闭合路径呢?看看下面的图:

当 x=2(T=8 或 9),S=2 或 3 时的路径图:,其中:蓝色表示转弯到达另一边,橙色表示直走,深红色表示 LR 对

根据这个,不难得出当 x 等于偶数时候的通项公式:FS/2(LR)(T-4)/4LLFS/2(LR)(T-4)/4LL

2、x 是奇数

和 x 是偶数时的走法差不多,虽然不能使路径严格对称,不过还是可以办到的,为了便于说明,先给一张图

当 x=3(T=10 或 11),S=4 或 5 时的路径图: 不同颜色代表的意义还是和上面一幅图相同

稍稍分析上面的图,不难得出当 x 等于奇数时候的通项公式:F(S-2)/2(LR)[(T-4)/4]+1LLFS/2(LR)(T-4)/4LFL

至此,所有情况考虑完全了...

做出来这题,好大的满足感啊!

参考代码

 #include <iostream>
#include <cstring>
#include <cstdio> using namespace std; int F, T; int main()
{
while(scanf("%d%d", &F, &T)!=EOF)
{
if(T<)
{
printf("Atawazu\n");
continue;
}
if(F<)
{
if(T<)
{
printf("4\nLLLL\n");
continue;
}
else
{
printf("%d\n", +((T-)/)*);
int x=(T-)/;
printf("RLLRLLRL");
for(int i=; i<x; i++) printf("RL");
printf("LRLL");
for(int i=; i<x; i++) printf("RL");
printf("\n");
continue;
}
}
printf("%d\n", (F/)*+(T/)*);
int x=(T-)/;
if(x%==)
{
for(int i=; i<F/; i++) printf("F");
for(int i=; i<x/; i++) printf("LR");
printf("LL");
for(int i=; i<F/; i++) printf("F");
for(int i=; i<x/; i++) printf("LR");
printf("LL");
}
else
{
for(int i=; i<F/-; i++) printf("F");
for(int i=; i<=x/; i++) printf("LR");
printf("LL");
for(int i=; i<F/; i++) printf("F");
for(int i=; i<x/; i++) printf("LR");
printf("LFL");
}
printf("\n");
}
return ;
}

URAL 1549

题目连接 & AC通道

URAL 1549 Another Japanese Puzzle

URAL 1549 Another Japanese Puzzle(构造)的更多相关文章

  1. 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]

    Tautonym Puzzle Time Limit: 50 Sec  Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...

  2. Codeforces Round #394 (Div. 2) E. Dasha and Puzzle 构造

    E. Dasha and Puzzle 题目连接: http://codeforces.com/contest/761/problem/E Description Dasha decided to h ...

  3. URAL 1995 Illegal spices 贪心构造

    Illegal spices 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1995 Description Jabba: Han, m ...

  4. Codeforces 761E Dasha and Puzzle(构造)

    题目链接 Dasha and Puzzle 对于无解的情况:若存在一个点入度大于4,那么直接判断无解. 从根结点出发(假设根结点的深度为0), 深度为0的节点到深度为1的节点的这些边长度为2^30, ...

  5. CF936C Lock Puzzle 构造

    传送门 好久不做构造题脑子都僵化了qwq 无解的条件是\(s\)包含的字符可重集和\(t\)包含的字符可重集不相等,相等的时候下文会给出一种一定可行的构造方案. 考虑增量构造.定义某个字符串\(x\) ...

  6. CF 936C Lock Puzzle——构造

    题目:http://codeforces.com/contest/936/problem/C 玩了一个小时,只能想出 5*n 的方法. 经过一番观察?考虑这样构造:已经使得 A 串的一个后缀 = B ...

  7. POJ 3388 Japanese Puzzle (二分)

    题意:给你一个n*n 的图,你总共有k 种花砖,告诉你每一种花砖的个数,让你随便安排它们的位置,问你最多有多少行和第一行是一样,并且要输出第一行的一定存在的图案. 析:首先这个题如果读懂了题意,一点也 ...

  8. URAL 1614. National Project “Trams” [ 构造 欧拉回路 ]

    传送门 1614. National Project “Trams” Time limit: 0.5 secondMemory limit: 64 MB President has declared ...

  9. (转)Spring读书笔记-----Spring核心机制:依赖注入

    Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...

随机推荐

  1. ubuntu安装redis

    1.下载安装root@21ebdf03a086:/# apt-cache search redisroot@21ebdf03a086:/# apt-get install redis-server a ...

  2. java web图片显示到浏览器

    今天研究了一下午,图片显示问题. jsp中获取绝对路径的方法:String contextPath = request.getContextPath();String path = request.g ...

  3. How to use AKBusGpsParser

    step 01: sudo easy_install AKBusGpsParser step02: Let's see a sample #!/usr/bin/python #coding:UTF-8 ...

  4. linux学习笔记1

    2016年09月25日 unix与linux发展史 unix是linux之父,学习linux后能容易上手unix. linux是源码开放的unix,由一位芬兰大学生李纳斯在网络上发起,和后来众多爱好者 ...

  5. duilib进阶教程 -- 各种控件的响应 (10)

    到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...

  6. paip java.net.SocketException No buffer space available的解决办法及总结

    java.net.SocketException No buffer space available的解决办法及总结 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来 ...

  7. 解决pageControl页面设置无效问题

    废话不多说,先上代码 1.添加pageViewControl - (void)addPageControl { UIPageControl *pageControl = [[UIPageControl ...

  8. 导出特定内容成insert语句

           )                                EXEC('SELECT ' + @insert_sql + ' FROM ' + @table  )

  9. Visual Studio 2013 无法正常打开项目文件

    提示:无法打开 vcxproj 因为此版本的应用程序不支持其项目类型 ,若要打开它 请使用支持此类型项目的版本. 检查  AppData\Roaming\Microsoft\VisualStudio\ ...

  10. IOS适配

    • Default.png(图片尺寸为320x480):显示在非Retina-3.5英寸屏幕上(iPhone3G\iPhone3GS,屏幕分辨率为320x480) • Default@2x.png(图 ...