URAL 1549 Another Japanese Puzzle(构造)
题目大意
构造一条闭合路线,使得路线不能相交,并且走直线的步数小于等于 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(构造)的更多相关文章
- 【AtCoder Grand Contest 012C】Tautonym Puzzle [构造]
Tautonym Puzzle Time Limit: 50 Sec Memory Limit: 256 MB Description 定义一个序列贡献为1,当且仅当这个序列 由两个相同的串拼接而成 ...
- 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 ...
- URAL 1995 Illegal spices 贪心构造
Illegal spices 题目连接: http://acm.timus.ru/problem.aspx?space=1&num=1995 Description Jabba: Han, m ...
- Codeforces 761E Dasha and Puzzle(构造)
题目链接 Dasha and Puzzle 对于无解的情况:若存在一个点入度大于4,那么直接判断无解. 从根结点出发(假设根结点的深度为0), 深度为0的节点到深度为1的节点的这些边长度为2^30, ...
- CF936C Lock Puzzle 构造
传送门 好久不做构造题脑子都僵化了qwq 无解的条件是\(s\)包含的字符可重集和\(t\)包含的字符可重集不相等,相等的时候下文会给出一种一定可行的构造方案. 考虑增量构造.定义某个字符串\(x\) ...
- CF 936C Lock Puzzle——构造
题目:http://codeforces.com/contest/936/problem/C 玩了一个小时,只能想出 5*n 的方法. 经过一番观察?考虑这样构造:已经使得 A 串的一个后缀 = B ...
- POJ 3388 Japanese Puzzle (二分)
题意:给你一个n*n 的图,你总共有k 种花砖,告诉你每一种花砖的个数,让你随便安排它们的位置,问你最多有多少行和第一行是一样,并且要输出第一行的一定存在的图案. 析:首先这个题如果读懂了题意,一点也 ...
- URAL 1614. National Project “Trams” [ 构造 欧拉回路 ]
传送门 1614. National Project “Trams” Time limit: 0.5 secondMemory limit: 64 MB President has declared ...
- (转)Spring读书笔记-----Spring核心机制:依赖注入
Java应用(从applets的小范围到全套n层服务端企业应用)是一种典型的依赖型应用,它就是由一些互相适当地协作的对象构成的.因此,我们说这些对象间存在依赖关系.加入A组件调用了B组件的方法,我们就 ...
随机推荐
- AVL树(三)之 Java的实现
概要 前面分别介绍了AVL树"C语言版本"和"C++版本",本章介绍AVL树的Java实现版本,它的算法与C语言和C++版本一样.内容包括:1. AVL树的介绍 ...
- JavaScript 中的 this ,看着一篇就够了
tip 在 js 中,this 这个上下文总是变化莫测,很多时候出现 bug 总是一头雾水,其实,只要分清楚不同的情况下如何执行就 ok 了. 全局执行 首先,我们在全局环境中看看它的 this 是什 ...
- Atitit.guice3 ioc 最佳实践 o9o
Atitit.guice3 ioc 最佳实践 o9o 1. Guice的优点and跟个spring的比较 1 2. 两个部分:::绑定and注入@Inject 1 3. 绑定所有的方法总结 2 3. ...
- atitit groovy 总结java 提升效率
atitit groovy 总结java 提升效率 #---环境配置 1 #------安装麻烦的 2 三.创建groovy项目 2 3. 添加 Groovy 类 2 4. 编译运行groovy类 ...
- 菜鸟日记-HTML-表格与表单
一.表格 <table></table> width:宽度.可以用像素或百分比表示. border:边框,常用值0 cellpadding:内容跟单元格边框的边距.常用值0 a ...
- Python核心编程(切片索引的更多内容)
# coding=utf8 s = 'abcde' i = -1 for i in range(-1, -len(s), -1): print(s[:i]) # 结果 ''' abcd abc ab ...
- Prototype in JavaScript
声明 本文旨在入门,简单了解下何为prototype & __proto__ 原型对象 我们创建每个函数都有个prototype(原型)属性,该属性是一个指针,指向一个对象,而这对象的用途是包 ...
- PHP学习计划
- AngularJs应用页面切换优化方案(转)
目录[-] 前言 场景 使用resolve来提前请求数据 为页面加入切换动画 总结 葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的wijmo中SpreadJS产品,另外,在研 ...
- 关于 MySQL 的 boolean 和 tinyint(1)
boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE, ...