[补档]Cube

Cube

题目

给你一个n×m的棋盘,有一个1×1×2的长方体竖直放在(1,1)上,你可以将其在棋盘上滚动,你的目标是让其竖直放在(n,m)上,问至少需要多少次操作。(放倒、竖直、翻滚)

INPUT

一行,两个整数n,m (n<=m)

OUTPUT

需要最少时间逃脱密室。若无解输出impossible。

SAMPLE

INPUT1

1 1

OUTPUT1

0

INPUT2

2 4

OUTPUT2

3

INPUT3

4 7

OUTPUT3

6

解题报告

看到“逃离密室”这四个字我是蒙的= =,(哪里提到密室了啊喂)

考试时就打了个n=1~3的特判,结果3还没打对= =

正解:

显然可以找规律。

n=1或2时,因为方块无法立起来在较小一维翻滚,所以只有1和2存在“impossible”情况,那么我们只需判断m与3的整除关系,显然只有(m-1)%3==0时才可能正好立起来到达终点,且步数为((m-1)/3)×2。如果n=2,还需加上方块横着滚一次的次数

n=3时最为特殊,因为方块可以通过各种奇怪的方法翻转,来达到立起来到达终点的结果,原因是因为n=3时,方块可以通过多次横滚加一次立起换向的方式达到效果,所以我们可以得到这样的式子:

ans=4+((m-1)/3)×2+(m-1)%3

然而我们需要注意3×3的情况,答案为8,我就不证了(不会证),其实自己画个图,翻两下就可以了

接下来是大部分的情况,我们考虑一个4×4的网格,显然,我们竖着操作两遍,横着操作两遍即可,那么就很简单了,假设我们加了一列,成了4×5,我们只需多横滚一次即可,所以很容易得出式子:

ans=((n-1)/3+(m-1)/3+(n-1)%3+(m-1)%3)×2

剩下的就是代码了

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 int n,m;
 6 int ans(0);
 7 int main(){
 8     scanf("%d%d",&n,&m);
 9     if(n==1||n==2){
10         if((m-1)%3){
11             puts("impossible");
12             return 0;
13         }
14         printf("%d",(((m-1)/3)<<1)+n-1);
15         return 0;
16     }
17     if(n==3){
18         if(m==3){
19             puts("8");
20             return 0;
21         }
22         ans=2;
23         ans+=((m-1)/3)<<1;
24         if((m-1)%3)
25             ans+=2+(m-1)%3;
26         printf("%d",ans);
27         return 0;
28     }
29     ans+=((n-1)/3)<<1;//cout<<ans<<endl;
30     ans+=(n-1)%3;//cout<<ans<<endl;
31     ans+=((m-1)/3)<<1;//cout<<ans<<endl;
32     ans+=(m-1)%3;//cout<<ans<<endl;
33     printf("%d",ans);
34 }

我考试时竟然想了暴搜,我也是服我自己= =

时间: 2024-10-25 12:55:40

[补档]Cube的相关文章

Leave It Behind and Carry On ---- 高一下期末考反思 [补档]

背景 这个学期的前\(\frac{3}{4}\), 我都是在停课集训中度过的, 先是GDKOI, 再是北京集训, 最后是GDOI, 结果GDOI还没进day3就滚粗了. 学校的内容是考完GDOI后回学校自学的, 这段时间里我继续停课自学了3个星期, 然后回班上了3个星期的课, 就期末考了. 期末考不出所料地挂得一塌涂地. 当然, 有的人说, 一个半月学完整个学期(4个月)的课程, 也不必对自己期望太高等等. 我认为实则不然. YAY大佬即便在同样停课的情况下, 期末考还考了年级第\(28\),

记录 [补档]

数学 概率论 计数问题 数论 线性代数 博弈论 比赛经验 不要通过数据大小猜测正解的时间复杂度. 把一个方法想到底. DP题假如实在不会的话, 果断跳过, 找思维量更小的数据结构题. 一些方法 二分 DP, 尤其多想矩阵乘法优化DP 网络流 FFT 日程表 Fri, Nov 10 明天就是NOIp了. 从上次记录到现在已经将近一个月了, 这个月, 真心没有进步多少, 完全不再状态. 希望不要AFO吧. 这可能是最后一篇记录了. Sun, Oct 22 AHOI 2009 中国象棋: 统计在棋盘上

[补档]暑假集训D3总结

考试 集训第一次考试,然而- - 总共四道题,两道打了DFS,一道暴力,一道~~输出样例~~乱搞,都是泪啊- - 目前只改了三道,回头改完那道题再上题解吧- - T2 [Poi2010]Monotonicity 2   https://hzoi-mafia.github.io/2017/07/27/20/ T3 [中山市选2011]杀人游戏   https://hzoi-mafia.github.io/2017/07/27/19/ T4 弱题  https://hzoi-mafia.github

[补档]两个奇怪的大水题

导引 这是两道由OSU(貌似是一个我没有听说过的游戏)引申出的大水题(淼到不行啊喂),壹佰万行代码哦. T1 OSU! 题目 osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串.在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释) 现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五

[补档]2017-7-9至2017-7-15小集训总结

关于考试 说实话,没想到能考成这个样子,总共不到30个人,D1考试rk4,到D4rk二十几,真是interesting(annoying),明明有好多题都基本上是正解却还不如暴力分多啊喂= = 明明打上了矩阵,结果发现矩阵建成了一坨奇奇怪怪的东西,明明能现场推出来tarjan(不要问我为什么要现场推= =),却生生要用它打dfs,明明最暴力都能过的题(谁能告诉我为啥树剖T的题,一个一个爬就能过),明明树剖都打完了,线段树竟然不会打了... 这事情真的难办啊... 关于刷题 这几天的题也是很神奇的

[补档][国家集训队2011]单选错位

题目 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案. 试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,-,ai,每个选项成为正确答案的概率都是相等的.lc采取的策略是每道题目随机写上1-ai的某个数作为答案选项,他用不了多少时间就能期望做对sigma(1/ai)道题目.gx则是认认真真地做完了这n道题目,可是等他做完的时候时间也所剩无几了,于是他匆忙地把答案抄到答题纸上,没想到抄错位了:第i道题目的答案抄到了答题纸上的第

[补档][中山市选2011]杀人游戏

题目 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手. 警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人,谁是杀手,谁是平民.假如查证的对象是杀手,杀手将会把警察干掉. 现在警察掌握了每一个人认识谁. 每一个人都有可能是杀手,可看作他们是杀手的概率是相同的. 问:根据最优的情况,保证警察自身安全并知道谁是杀手的概率最大是多少? INPUT 第一行有两个整数 N,M. 接下来有 M 行,每行两个整数 x,y,表示 x 认识 y(

[补档计划] 类欧几里得算法

$$\begin{aligned} f(a, b, c, n) & = \sum_{i = 0}^n \lfloor \frac{ai + b}{c} \rfloor \\ & = \sum_{i = 0}^n \sum_{j = 0}^{m-1} [j < \lfloor \frac{ai + b}{c} \rfloor] \\ & = \sum_{i = 0}^n \sum_{j = 0}^{m-1} [j + 1 \le \lfloor \frac{ai + b}{c}

[补档计划] 概率论

4.1 事件与概率 在一个黑箱中, 放着 3 个红球和 1 个白球. 我们从箱中取出一个球, 再放回去, 反复进行若干次. 每一次的结果是不确定的, 但总体上拿到红球的次数与拿到白球的次数接近 3 : 1 . 我们发现, 这类现象很常见, 那么我们就要尝试把这类现象的特点进行概括, 命名, 然后研究它的性质, 进而应用它. 概括一下这种现象: 在个别实验中其结果呈现出不确定性, 而在大量重复实验中其结果又具有统计规律性. 为了简便地称呼这种现象, 我们要给它起名字, 称之为 "随机现象"