NUOJ 88

思路1:

找规律,本题若是直接暴力搜索,就是f(n)=2^n-1,然后f(n)%1000000,那么结果会越界;所以考虑用f(n+1)=(2*f(n)+1)%1000000,不过遇到较大数据的时候,会出现超时的情况,毕竟这个结果是线性时间增长的,和输入数据体量的大小有直接关系,所以这里还需要再次考虑优化。通过数据对比发现,当n>10005时,有f(123456)=f(23456)  f(123456789)=f(23456789)=...=f(56789)  即略去高位,剩下五位数。但是还需要考虑的是 if(m%100000<6),需要有m=100000+m%10;如此处理之后就不会超时了。

 1 #include <iostream>
 2 using namespace std;
 3
 4 int num[100006];
 5 int main(){
 6     int N,m,i;
 7     num[1]=1;
 8     for(int i=2;i<100006;i++){
 9         num[i] = (2*num[i-1]+1)%1000000;
10     }
11     cin>>N;
12     while(N--){
13         cin>>m;
14         if(m>100005){
15             if(m%100000<6 ){
16                 m = 100000+m%10;
17             }
18             else{
19                 m = m%100000;
20             }
21         }
22         cout<<num[m]<<endl;
23     }
24
25 }

思路2:

我们知道汉诺塔的公式是f(n)=2^n-1

而f(n)%1000000= (2^n-1)%1000000 = 2^n%100000-1

而2^n%1000000可以用快速幂算法计算,代码如下:

 1 #include <iostream>
 2 using namespace std;
 3
 4 long long fastmod(long long a,long long b,long long c){
 5     long long num=1;
 6     a%=c;//这里不进行初始化也是可以的
 7
 8     while(b>0){
 9         if(b%2==1){
10             num=(num*a)%c;
11         }
12         b/=2;     //这一步将b->log2(b)
13         a=(a*a)%c;
14     }
15     return num;
16 }
17
18 int main(){
19     int n;
20     cin>>n;
21     while(n--){
22         long long m;
23         cin>>m;
24         cout<<fastmod(2,m,1000000)-1<<endl;
25     }
26 }
时间: 2024-11-29 11:25:47

NUOJ 88的相关文章

蜜恃难综团ki1q5938y044

"下面,我说一些升级考核的要点,你们要牢记.首先,第一点也是没有半分技巧可言的,就是绝对的实力,也就是你们的魂力.一年级升入二年级,要求所有学员的魂力必须要达到二十级.升级考核的时候,如果还没有两个魂环的话,那么,我建议你们下个学年就不用来了.无论其他考核你们的表现有多么优秀,达不到两环也没用.学院的规则谁也无法改变.因此,那些没有达到二十级魂力的学员,在接下来的一个月中,你们要拼命了.而且,还必须要去获取一个魂环才行.以证明你们的实力达到了大魂师层次."今天学院门口的人流明显有所减少

88个 Linux 系统管理员必备的监控工具

随着互联网行业的不断发展,各种监控工具多得不可胜数.这里列出网上最全的监控工具.让你可以拥有超过80种方式来管理你的机器.在本文中,我们主要包括以下方面: 命令行工具 网络相关内容 系统相关的监控工具 日志监控工具 基础设施监控工具 监控和调试性能问题是一个艰巨的任务,但用对了正确的工具有时也是很容易的.下面是一些你可能听说过的工具,也有可能没有听说过——何不赶快开始试试? 八大系统监控工具 1. top 这是一个被预装在许多 UNIX 系统中的小工具.当你想要查看在系统中运行的进程或线程时:t

LeetCode --- 88. Merge Sorted Array

题目链接:Merge Sorted Array Given two sorted integer arrays A and B, merge B into A as one sorted array. Note: You may assume that A has enough space (size that is greater or equal to m + n) to hold additional elements from B. The number of elements init

微信公众平台开发(88) 用户分组接口

本文介绍在微信公众平台上如何使用高级接口开发用户分组接口的功能. 一.接口介绍 开发者可以使用接口,对公众平台的分组进行查询.创建.修改操作,也可以使用接口在需要时移动用户到某个分组. 一个公众账号,最多支持创建500个分组. 接口调用请求说明创建分组http请求方式: POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN POST数据格式:json POST数据例子:

张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动 8&#215;8 点阵

原文:张高兴的 Windows 10 IoT 开发笔记:使用 MAX7219 驱动 8×8 点阵 GitHub:https://github.com/ZhangGaoxing/windows-iot-demo/tree/master/MAX7219

BestCoder Round #88

传送门:BestCoder Round #88 分析: A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了: 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <ctime> 5 #include <cmath> 6 #include <iostream> 7 #include <algorithm> 8

道亨SLW5.88 SLCAD5.88架空送电线路平断面图处理系统

Bentley.Power.GEOPAK.V8i.08.11.09.493 1CD Bentley.PowerCivil.V8i.08.11.07.614 1DVD Synopsys.MW.vH-2013.03.Linux32_64 2CD Synopsys.Starrc.vH-2012.12.SP2.Linux32_64 2CD Bentley.MicroStation.PowerDraft.V8i.08.11.09.397 1CD Instrucalc.v8.1.Win32_64 2CD S

本人最新博客地址:http://www.linuxmysql.com:88

本人最新博客地址:www.linuxmysql.com:88

编写高质量代码改善C#程序的157个建议——建议88:并行并不总是速度更快

建议88:并行并不总是速度更快 并行所带来的后台任务及任务的管理,都会带来一定的开销,如果一项工作本来就能很快完成,或者说循环体很小,那么并行的速度也许会比非并行要慢. 看这样一个例子,我们比较在同步和并行状态下的时间消耗: static void Main(string[] args) { Stopwatch watch = new Stopwatch(); watch.Start(); DoInFor(); watch.Stop(); Console.WriteLine("同步耗时:{0}&