Comet OJ 计算机(computer)

题目传送门

题目描述

小 X 有一台奇怪的计算机。

这台计算机首先会读入一个正整数 nn,然后生成一个包含 nn 个数的序列 aa

一开始 a_i(1 \le i \le n)a**i(1≤in) 的值均为 11。

接下来,小 X 会进行 n-1n−1 次操作,每次操作会输入一个指令,这个指令有 22 种情况:

  1. x +表示把此时序列中第 xx 个数 a_xa**x 和第 x+1x+1 个数 a_{x+1}a**x+1 合并为一个数,值为 a_x + a_{x+1}a**x+a**x+1。
  2. x *表示把此时序列中第 xx 个数 a_xa**x 和第 x+1x+1 个数 a_{x+1}a**x+1 合并为一个数,值为 a_x \times a_{x+1}a**x×a**x+1。

假设某个时刻序列中元素的个数为 kk,小 X 必须保证 1 \le x < k1≤x<k

那么,经过 n-1n−1 次操作后,序列只剩下了一个数,此时计算机会输出这个数。

小 X 想知道,当他输入 nn 时,这台计算器输出的数最大会是多少。

由于这个数可能会很大,你只需要求出这个数模 10^9+7109+7 的值。

输入描述

一行一个正整数 nn

输出描述

一行一个整数,表示答案对 10^9+7109+7 取模后的值。

样例输入 1

6

样例输出 1

9

样例解释 1

一开始的序列为1 1 1 1 1 1

小 X 的操作指令如下:

1.1 +序列变为2 1 1 1 1

2.1 +序列变为3 1 1 1

3.2 +序列变为3 2 1

4.2 +序列变为3 3

5.1 *序列变为9

可以证明没有操作指令可以使计算机输出的数大于 99。

样例输入 2

37

样例输出 2

708588

提示

【数据范围与提示】

对于 10%10% 的数据,1 \le n \le 21≤n≤2。

对于 25%25% 的数据,1 \le n \le 101≤n≤10。

对于 40%40% 的数据,1 \le n \le 1001≤n≤100。

对于 55%55% 的数据,1 \le n \le 10001≤n≤1000。

对于 70%70% 的数据,1 \le n \le 10^61≤n≤106。

对于 85%85% 的数据,1 \le n \le 10^91≤n≤109。

对于 100%100% 的数据,1 \le n \le 10^{18}1≤n≤1018。

题解:

一道数学题。

我喜欢把这种题叫做数列操作题。一般来讲,这种题不是DP就是数学推导。针对于这道题来讲,我们无法设计DP,只能使用我们的脑袋瓜子进行数学问题的分析和推导。

首先,我们初始的数列全都是1,我们在此基础上进行数列合并操作。那么题意可以转化为,给定\(n\),让你把\(n\)分解成若干个整数,使得其乘积最大。

然后我们进行模拟拆分,我们会发现,针对一个1 1 1 1的串,我们可以直接把它合成4,也可以把它拆成\(2\times 2\),最后也得4。但是,如果针对一个长度比4还大的串,比如1 1 1 1 1,我们如果直接加的话,就是5,而进行合并成\(2\times 3\)的话,就会出现6的答案。也就是说,针对一个全由1组成的串中长度大于4的字串,我们把它拆成由一群2和一群3的乘积的做法对后来的答案总是贡献最大的。

也就是说,原题的目的就可以被我们搞成\(2^a\times 3^b\).我们很容易得出,拆出的3越多越好。

这样的话,我们用\(n\)模3,如果余数为0,那么就直接输出\(3^{\frac{n}{3}}\).如果余数为1,那么我们就拆成\(2\times 2\times 3^{\frac{n-4}{3}}\),如果余数为2,就直接拆成\(2\times 3^{\frac{n-2}{3}}\)。

注意特盘答案为1和指数为1的情况,记得每一步都要取模,以及开Longlong,本题可A/

求幂的操作一定要用快速幂,要不然肯定会T啊。

如果不会快速幂的话...

请参考以下的博客:

浅谈快速幂

代码如下:

#include<cstdio>
#define ll long long
using namespace std;
const ll mod=1e9+7;
ll n;
ll qpow(ll a,ll b)
{
ll ret=1;
if(!b)
return 1;
while(b>0)
{
if(b&1)
ret=(ret*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return ret%mod;
}
int main()
{
scanf("%lld",&n);
if(n==1)
{
printf("1");
return 0;
}
if(n%3==0)
{
ll p=n/3;
printf("%lld",qpow(3,p));
}
else if(n%3==1)
{
ll p=(n-4)/3;
printf("%lld",(4*qpow(3,p))%mod);
}
else
{
ll p=(n-2)/3;
printf("%lld",(2*qpow(3,p))%mod);
}
return 0;
}

Comet OJ 计算机(computer)的更多相关文章

  1. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

  2. Comet OJ - Contest #2简要题解

    Comet OJ - Contest #2简要题解 前言: 我没有小裙子,我太菜了. A 因自过去而至的残响起舞 https://www.cometoj.com/contest/37/problem/ ...

  3. Comet OJ - Contest #4--前缀和

    原题:Comet OJ - Contest #4-B https://www.cometoj.com/contest/39/problem/B?problem_id=1577传送门 一开始就想着暴力打 ...

  4. Comet OJ - Contest #11 题解&赛后总结

    Solution of Comet OJ - Contest #11 A.eon -Problem designed by Starria- 在模 10 意义下,答案变为最大数的最低位(即原数数位的最 ...

  5. Comet OJ - Contest #8

    Comet OJ - Contest #8 传送门 A.杀手皇后 签到. Code #include <bits/stdc++.h> using namespace std; typede ...

  6. Comet OJ - Contest #13-C2

    Comet OJ - Contest #13-C2 C2-佛御石之钵 -不碎的意志-」(困难版) 又是一道并查集.最近做过的并查集的题貌似蛮多的. 思路 首先考虑,每次处理矩形只考虑从0变成1的点.这 ...

  7. Comet OJ 夏季欢乐赛 篮球校赛

    Comet OJ 夏季欢乐赛 篮球校赛 题目传送门 题目描述 JWJU注重培养学生的"唱,跳,rap,篮球"能力.于是每年JWJU都会举办篮球校赛,来给同学们一个切磋篮球技术的平台 ...

  8. Comet OJ 夏季欢乐赛 Gree的心房

    Comet OJ 夏季欢乐赛 Gree的心房 题目传送门 题目描述 据说每一个走进Gree哥哥心房的小姑娘都没有能够再走出来-- 我们将Gree哥哥的心房抽象成一个n \times mn×m的地图,初 ...

  9. Comet OJ 夏季欢乐赛 分配学号

    Comet OJ 夏季欢乐赛 H 分配学号 题目传送门 题目描述 今天,是JWJU给同学们分配学号的一天!为了让大家尽可能的得到自己想要的学号,鸡尾酒让大家先从 [1,10^{18}][1,1018] ...

随机推荐

  1. 【正则】day01

    正则表达式一.概述    验证    网络爬虫. 概念:    具有语法格式的字符串. 函数    PCRE    1.perl语言正则语法兼容.(java c)    2.速度快,效率高.    P ...

  2. CF1207G Indie Album

    题目链接 problem 有\(n\)个字符串,对于第\(i\)个字符串通过以下两种方式中的一个给出. \(1\; c\),该字符串只含一个字符\(c\). \(2\ x\ c\),该字符串为第\(x ...

  3. Paper | Recovering Realistic Texture in Image Super-resolution by Deep Spatial Feature Transform

    目录 故事背景 空域特征转换 超分辨率网络 发表在2018年CVPR. 摘要 Despite that convolutional neural networks (CNN) have recentl ...

  4. 第02组 Beta冲刺(3/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践的报告 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估. ...

  5. 剑指offer:二叉搜索树的第k个结点(中序遍历)

    1. 题目描述 /* 给定一棵二叉搜索树,请找出其中的第k小的结点. 例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. */ 2. 思路 中序遍历二叉搜索树,第K个就 ...

  6. Windows7运行python3,提示缺少api-ms-win-crt-runtime-l1-1.0.dll

    一.实验环境 1.Windows7x64_SP1 二.操作步骤 2.1 python官网下载python3.6后,安装.运行,提示如下错误: 2.2 解决方式 去微软官网下载安装:KB2999226补 ...

  7. Web页面精确定位

    Web端页面定位相关 一.获取宽高相关属性 scrollHeight:获取对象的滚动高度: scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离: scrollTop: ...

  8. 【前端开发环境】前端使用GIT管理代码仓库需要掌握的几个必备技巧和知识点总结

    1. Git的三种状态 已提交 committed 已暂存 staged 已修改 modified 2. Git的三个区域 Git仓库 是 Git 用来保存项目的元数据和对象数据库的地方. 这是 Gi ...

  9. CSS3实现文字描边的2种方法

    问题 最近遇到一个需求,需要实现文字的描边效果,如下图           解决方法一     首先想到去看CSS3有没有什么属性可以实现,后来被我找到了text-stroke     该属性是一个复 ...

  10. hive on spark 释放session资源

    背景 启动hive时,可以看到2.0以后的版本,将要弃用mr引擎,官方建议使用spark,tez等引擎. spark同时支持批式流式处理,可以减少学习成本.所以选用了spark作为执行引擎. hive ...