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
剩下的就是代码了
 #include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n,m;
int ans();
int main(){
scanf("%d%d",&n,&m);
if(n==||n==){
if((m-)%){
puts("impossible");
return ;
}
printf("%d",(((m-)/)<<)+n-);
return ;
}
if(n==){
if(m==){
puts("");
return ;
}
ans=;
ans+=((m-)/)<<;
if((m-)%)
ans+=+(m-)%;
printf("%d",ans);
return ;
}
ans+=((n-)/)<<;//cout<<ans<<endl;
ans+=(n-)%;//cout<<ans<<endl;
ans+=((m-)/)<<;//cout<<ans<<endl;
ans+=(m-)%;//cout<<ans<<endl;
printf("%d",ans);
}
我考试时竟然想了暴搜,我也是服我自己= =

[补档]Cube的更多相关文章

  1. STL 补档

    STL 补档 1.vector 作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据. vector在C++标准模板库中的部分内容,它是 ...

  2. 图论补档——KM算法+稳定婚姻问题

    突然发现考前复习图论的时候直接把 KM 和 稳定婚姻 给跳了--emmm 结果现在刷训练指南就疯狂补档.QAQ. KM算法--二分图最大带权匹配 提出问题 (不严谨定义,理解即可) 二分图 定义:将点 ...

  3. [补档] 大假期集训Part.1

    新博客搭起来先补一发档... 那就从大假期集训第一部分说起好了QwQ 自己还是太菜掉回了2016级水平 day1: day1的时候来得有点晚(毕竟准高一)然后进机房发现早就开考了还没有给我题面于是搞了 ...

  4. 软件安装配置笔记(三)——ArcGIS系列产品安装与配置(补档)(附数据库连接及数据导入)

    在前两篇安装配置笔记之后,就忘记把其他安装配置笔记迁移过来了,真是失误失误!趁现在其他文档需要赶紧补上. 目录: 一.ArcMap 二.ArcMap连接数据库并导入数据 三.Arcgis Pro 四. ...

  5. 补档 Codeblocks下的文件标题栏(标签)显示方法

    可能在以下链接也能看到这篇文档 我知道很多人都不知道这个到底叫啥,还不如直接一点: 文件标题栏 就是如下的效果. 解决办法: 在左上角第三个view下,打开后取消Hide editor tabs 选项 ...

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

    背景 这个学期的前\(\frac{3}{4}\), 我都是在停课集训中度过的, 先是GDKOI, 再是北京集训, 最后是GDOI, 结果GDOI还没进day3就滚粗了. 学校的内容是考完GDOI后回学 ...

  7. Java 高效编程(Effective Java)中文第三版(补档)

    来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...

  8. [补档]暑假集训D8总结

    %dalao 今天有两位大佬来讲课,meaty来讲了Catalan(本来说好的莫比乌斯反演呢),聪聪来讲Splay呢 至于听课笔记= =,没来得及记= = 不过好不想上树啊,上了树就下不来了 考试 仍 ...

  9. [补档]从OI学麻将

    背景 作为一名川娃子,怎么能不懂麻将呢= = T1 さきなに~~ [咲 -Saki-] 天才麻将少女什么编 题目 二十一世纪,世界上的麻将竞技人数超过一亿,日本每年也有大规模的全国大赛来对麻将选手进行 ...

随机推荐

  1. Java基础知识整理(一)

    Java开发环境JDK(Java编辑器.Java运行工具(JRE作用).Java文档生成工具.Java打包工具) 1.Java是严格区分大小写的.2.Java程序中一句连续的字符串不能分开在两行书写, ...

  2. Java代码实现 增删查 + 分页——实习第四天

    今天项目内容已经开始了,并且已经完成好多基本操作,今天就开始总结今天学习到的内容,和我遇到的问题,以及分析这其中的原因. 内容模块: 1:Java代码实现对数据库的增删查: 2:分页且获取页面信息: ...

  3. cesium自定义气泡窗口infoWindow后续优化篇

    http://www.cnblogs.com/giserhome/p/6248858.html该篇文章实现的自定义气泡窗口是基于修改cesium源代码基础上,这种做法只是援兵之计,凑合应付的,投机取巧 ...

  4. Vuejs技术栈从CLI到打包上线实战全解析

    前言 本文是自己vue项目实践中的一些总结,针对Vue2及相关技术栈,实践中版本为2.3.3. 开发前须知 vue-cli 在开发前,我们要至少通读一遍vue官方文档和API(看官方文档是最重要的,胜 ...

  5. .Net上传文件大小配置

    1.起因 今天同事在上传文件的时候,发现一直失败,说文件比较大.一听就明白了,肯定是上传文件大小的问题啊.然后查看web.config文件,发现设置过文件上传的大小限制.配置文件上传大小,分为2部分. ...

  6. 查找oracle自己用户的表

    查找oracle自己用户的表 select table_name from user_tables;

  7. js中的数字格式变成货币类型的格式

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  8. 使用python操作mysql数据库

    这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector ...

  9. ionic项目结构解析

    ionic项目结构解析 原始结构 创建一个IonicDemo项目 'ionic start IonicDemo sidemenu' 这种结构多模块开发比较麻烦,因为view跟controller分开路 ...

  10. winform .net2.0的程序如何运行于.net 4.x

    约束 最近有一个winform项目,要求: (1)程序能够运行在winxp, win7, win8, win10中 (2)安装尽可能简单,尽量不要安装.net framework.即使要安装也要尽可以 ...