java实现 蓝桥杯 算法提高 Problem S4: Interesting Numbers 加强版
1 问题描述
Problem Description
  We call a number interesting, if and only if:
  1. Its digits consists of only 0, 1, 2 and 3, and all these digits occurred at least once.
  2. Inside this number, all 0s occur before any 1s, and all 2s occur before any 3s.
  Therefore, the smallest interesting number according to our definition is 2013. There are two more interseting number of 4 digits: 2031 and 2301.
  Your task is to calculate the number of interesting numbers of exactly n digits. As the answer might be very large, you only need to output the answer modulo 1000000007.
Input Format
  The input has one line consisting of one positive integer n (4 ≤ n ≤ 10^15).
Output Format
  The output has just one line, containing the number of interesting numbers of exactly n digits, modulo 1000000007.
Input Sample
  4
Output Sample
  3
2 解决方案
本题主要考查数学组合数推理化简,具体思考过程如下:

推导过程,在草稿纸上推导了一下:

import java.util.Scanner;
public class Main {
	static long n;
	static long mul, ans, res;
	static long monum = 1000000007;
	private static long cal(long n) {
		if (n == 1)
			return 2;
		long num = cal(n / 2);
		num = num * num % monum;
		if (n % 2 == 1)
			num = num * 2 % monum;
		return num;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner reader = new Scanner(System.in);
		n = reader.nextLong();
		if (n == 4)
			System.out.println(3);
		else {
			n = n - 1;
			res = (n % monum) * (n % monum);
			res = ((res - 3 * n) % monum + monum) % monum;
			n = n - 2;
			mul = cal(n);
			res = res * mul % monum;
			n = n + 2;
			res = (res + n) % monum;
			System.out.println(res);
		}
	}
}
												
											java实现 蓝桥杯 算法提高 Problem S4: Interesting Numbers 加强版的更多相关文章
- 算法笔记_093:蓝桥杯练习 Problem S4: Interesting Numbers 加强版(Java)
		
目录 1 问题描述 2 解决方案 1 问题描述 Problem Description We call a number interesting, if and only if: 1. Its d ...
 - Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
		
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
 - Java实现 蓝桥杯 算法提高 小X的购物计划
		
试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...
 - Java实现 蓝桥杯 算法提高 天天向上(DP)
		
试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...
 - Java实现 蓝桥杯 算法提高 欧拉函数(数学)
		
试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...
 - Java实现 蓝桥杯 算法提高 计算超阶乘(暴力)
		
试题 算法提高 计算超阶乘 问题描述 计算1*(1+k)(1+2k)(1+3k)-(1+n*k-k)的末尾有多少个0,最后一位非0位是多少. 输入格式 输入的第一行包含两个整数n, k. 输出格式 输 ...
 - Java实现蓝桥杯 算法提高 线段和点
		
算法提高 线段和点 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 有n个点和m个区间,点和区间的端点全部是整数,对于点a和区间[b,c],若a>=b且a<=c,称点a满 ...
 - Java实现蓝桥杯-算法提高 P1003
		
算法提高 P1003 时间限制:1.0s 内存限制:256.0MB 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词.不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检 ...
 - Java实现蓝桥杯 算法提高 八皇后 改
		
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
 
随机推荐
- 解决Hystrix dashboard  Turbine 一直 Loading…… 及其他坑
			
问题一.请求 /hystrix.stream 报错,我这里以端口9001为例 请求 http://localhost:9001/hystrix.stream 报404 是因为Srping Boot 2 ...
 - Postman学习宝典(三)
			
Postman 入门3 - Newman Newman 官方帮助文档地址 Newman 安装 嗯,它需要安装,因为它不是音乐播放器!Newman是为Postman而生,专门用来运行Postman编写好 ...
 - python实现简易工资管理系统(Salary Manage)源码
			
一.需求: 1.导入文件读取员工的信息和工资信息,最后将增加.删除或修改的员工工资信息写入原来的文件中 2.能够实现员工工资信息的增删改查 3.当增加和修改员工信息时用户用空格分隔员工姓名和薪资 4. ...
 - Django操作session
			
session是存放在服务端的,在django中使用session必须要先在数据库中创建django_session表,session相关信息都要依赖此表 获取session request.sess ...
 - 关于MYSQL 和INNODB的逻辑关系图。最好的理解是一点点动手做,观察,记录,思考。
			
每隔0.1秒就刷一次MYSQL文件的变化,并闪动标示出来,以观察SQL执行时,MYSQL的处理顺序. watch -n 0.1 -d stat /var/lib/mysql/ib_logfile0 / ...
 - place-holder样式
			
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #777; } input:-moz-pl ...
 - BZOJ 1084DP
			
1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2796 Solved: 1391[Submit][Sta ...
 - 初识Java以及JAVA开发环境搭建
			
目录 JAVA帝国的诞生 C&C++ JAVA JAVA特性和优势 JAVA三大版本 JDK.JRE.JVE JAVA开发环境搭建 JDK下载与安装.卸载 安装JDK 卸载JDK JDK目录介 ...
 - 好用的python性能测试神器–Locust
			
原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...
 - 剑指Offer之二进制中1的个数
			
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解法1:使用Integer.toBinanryString()返回int变量的二进制表示的字符串. [在Intege ...