Java实现蓝桥杯历届试题格子刷油漆
问题描述
X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。
你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)
比如:a d b c e f 就是合格的刷漆顺序。
c e f d a b 是另一种合适的方案。
当已知 N 时,求总的方案数。当N较大时,结果会迅速增大,请把结果对 1000000007 (十亿零七) 取模。
输入格式
输入数据为一个正整数(不大于1000)
输出格式
输出数据为一个正整数。
样例输入
2
样例输出
24
样例输入
3
样例输出
96
样例输入
22
样例输出
359635897
问题分析:
首先,对这些墙刷油漆主要分为两大类:
1.从最边缘的四个格子出发,然后遍历完所有格子;
2:从中间的某个格子出发,先遍历完一边的格子,回到这个格子所对的格子,然后遍历另一边的格子。
所以,我们不妨用两个数组来表示这两种情况:
1.a[i]数组表示从最边缘的四个格子中某个出发,遍历完长度为i,个数为2i个格子的所有种类数;
2.b[i]数组表示从除了最边缘的四个格子外的某个中间的格子出发,遍历完一边回到所对的格子;
然后,我们来分别分析a[i]和b[i]两种不同的情况:
1.a[i]第一种情况:先走这个格子(以左上角的格子为例)所对的下面的格子,然后从下面这个格子的位置出发,有两种走法,分别到第二列的两个格子,所以第一种情况有:
2a[i-1]种;a[i]第二种情况:(举例)先从左上角的格子走到第二列某个格子,然后从第二列的格子出发,遍历完右面所有的格子,再回到第二列格子所对的格子,最后到第一列未遍历的格子,所以这种情况就是我们定义的b[i];a[i]第三种情况:就是遍历完一二列的所有格子,从第三列的格子出发,进行遍历。由于遍历完一二列的所有格子有四种情况,所以第三种情况为:4a[i-2];
所以,a[i]=2a[i-1]+b[i]+4a[i-2];
2.b[i]的情况:b[i]比较简单,只有两种情况,从同一行的格子出发,回到他所对的格子;或者从他对角的格子出发,回到他所对的格子。
所以,b[i]=2*b[i-1];
接下来,就是算总和:
1.四个角:定义sun=4*a[n];
2.设从第i列开始,则前面有i-1列,后面有n-i列。
第i列有两个格子,这两个格子所表示的情况数是相同的,所以只需要讨论一个。
然后,我们以第i列的上面的格子为例,先遍历他的左边,然后遍历右边。(回到他所对的格子,遍历右边时,又分为两种情况。从第i+1列上面的格子开始和从下面的格子开始)
即b[i]2a[n-i],化简得:2*b[i-1]2a[n-i];
同理得:先遍历右边,再遍历左边为:2*b[n-i]2a[i-1];
然后又因为a[1]=1;a[2]=6;b[1]=1;
import java.util.Scanner;
public class 格子刷油漆 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
long a[]=new long[n+1];
long b[]=new long[n+1];
long sum;
b[1]=1;
for(int i=2;i<=n;i++){
b[i]=2*b[i-1]%1000000007;
}
a[1]=1;a[2]=6;
for(int i=3;i<=n;i++){
a[i]=(2*a[i-1]+b[i]+4*a[i-2])%1000000007;
}
sum=(4*a[n])%1000000007;
for(int i=2;i<n;i++){
sum+=((8*b[i-1]*a[n-i])%1000000007+(8*b[n-i]*a[i-1])%1000000007)%1000000007;//必须每个项都取余,防止有大于这个数的情况
sum%=1000000007;
}
System.out.println(sum);
}
}
到处转载只是为了给复习的人提供便利,看一个博主就能找到挺全的题和题解
转自:https://blog.csdn.net/qq_22891105/article/details/51050565
Java实现蓝桥杯历届试题格子刷油漆的更多相关文章
- 算法笔记_185:历届试题 格子刷油漆(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可 ...
- Java实现蓝桥杯历届试题兰顿蚂蚁
历届试题 兰顿蚂蚁 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其 ...
- Java实现蓝桥杯历届试题分考场
历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...
- Java实现蓝桥杯历届试题回文数字
历届试题 回文数字 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的.这样的数字叫做: ...
- Java实现蓝桥杯历届试题高僧斗法
历届试题 高僧斗法 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 古时丧葬活动中经常请高僧做法事.仪式结束后,有时会有"高僧斗法"的趣味节目,以 ...
- Java实现蓝桥杯历届试题买不到的数目
历届试题 买不到的数目 时间限制:1.0s 内存限制:256.0MB 提交此题 锦囊1 锦囊2 问题描述 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友 ...
- Java实现 蓝桥杯 历届试题 斐波那契
试题 历届试题 斐波那契 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 斐波那契数列大家都非常熟悉.它的定义是: f(x) = 1 - (x=1,2) f(x) = f(x-1) ...
- Java实现 蓝桥杯 历届试题 小计算器
历届试题 小计算器 时间限制:1.0s 内存限制:256.0MB 问题描述 模拟程序型计算器,依次输入指令,可能包含的指令有 1. 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个 ...
- Java实现蓝桥杯 历届试题 k倍区间
历届试题 k倍区间 时间限制:2.0s 内存限制:256.0MB 问题描述 给定一个长度为N的数列,A1, A2, - AN,如果其中一段连续的子序列Ai, Ai+1, - Aj(i <= j) ...
随机推荐
- 【Hadoop离线基础总结】Hue与Hive集成
目录 1.更改hue的配置hue.ini 2.启动hive的metastore以及hiveserver2服务 3.启动hue进程,查看Hive是否与Hue集成成功 1.更改hue的配置hue.ini ...
- PDF怎么转换成Word,免费,完整的那种
简介 PDF可以分为文字型PDF和图片型PDF,文字型PDF即可以选中文字内容的PDF,反之图片型PDF即无法选中文字的PDF,其内容实际上是图片. 本文针对不同类型,介绍PDF转Word方法,可 ...
- python语法学习第三天--列表
列表:python中不用定义类型,类似工厂 列表的创建: ①创建普通列表:[1,2],用逗号隔开 ②创建一个混合列表:[1,‘zyf',3.14,[1,2,3]] ③创建空列表:empty=[] 常用 ...
- 配置类为什么要添加@Configuration注解呢?
配置类为什么要添加@Configuration注解呢? 本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 推荐阅读: Spring官网阅读 | 总结篇 Spring ...
- Spring MVC 函数式编程进阶
1. 前言 上一篇对 Spring MVC 的函数式接口编程进行了简单入门,让很多不知道的同学见识了这种新操作.也有反应这种看起来没有传统写法顺眼,其实大家都一样.但是我们还是要敢于尝试新事物.Jav ...
- eclipse导入工程报错-项目或者文件有红叉的解决方案
1.Java的JDK或者Tomcat版本不一致 像这样的我们首先找到项目---->Build Path--->Config BuildPath,将找不到的JDK或者Tomcat进行删除和添 ...
- [Unity UGUI序列帧]简单实现序列帧的播放
在使用序列帧之前需要准备好序列帧的图集,打图集的操作参考 [Unity UGUI图集系统]浅谈UGUI图集使用 准备好序列帧图集,序列帧的播放原理就是获取到图集中的所有图片,然后按照设置的速度按个赋值 ...
- Codeforces1138-A(D题)Sushi for Two
Arkady invited Anna for a dinner to a sushi restaurant. The restaurant is a bit unusual: it offers n ...
- Django操作cookie实例
cookie项目文件: templates模板: login.html {% load static %} <!DOCTYPE html> <html lang="en& ...
- k8s搭建实操记录一(master)
#1)关闭CentOS7自带的防火墙服务 systemctl disable firewalld systemctl stop firewalld swapoff -a ##虚拟机要关闭交换 ...