HDU 5587 Array(递归)
来源:互联网 发布:新点招投标软件下载 编辑:程序博客网 时间:2024/06/06 08:59
题目链接
题意:他将他当天的数列复制一遍,放在数列尾,并在两个数列间用0隔开。Vicky想做些改变,于是他将当天新产生的所有数字(包括0)全加1。Vicky现在想考考你,经过100天后,这个数列的前M项和是多少?。
解法:先预处理,第i天的长度和和。然后递归,m<2^64;
//#define CF#ifndef CF#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<set>#include<vector>#else#include<bits/stdc++.h>#endif // CFusing namespace std;#define LL long long#define pb push_back#define X first#define Y second#define cl(a,b) memset(a,b,sizeof(a))typedef pair<long long ,long long > P;const int maxn=100005;const LL inf=1LL<<50;const LL mod=1e9+7;LL sum[64];LL len[64];void init(){ sum[1]=len[1]=1; for(int i=2;i<64;i++){ sum[i]=sum[i-1]*2LL+len[i-1]+1; len[i]=len[i-1]*2LL+1; }}LL slove(LL m){ int i; for(i=1;len[i]<=m;i++);i--; if(len[i]==m)return sum[i]; if(len[i]==m-1)return sum[i]+1; return sum[i]+slove(m-(len[i]+1))+m-len[i];}int main() { int T;scanf("%d",&T); init(); while(T--){ LL n;scanf("%lld",&n); printf("%lld\n",slove(n)); } return 0;}
0 0
- HDU 5587 Array(递归)
- HDU 5587 Array 规律+递归
- HDU-5587 Array(DFS)
- HDU 5587 Array (规律)
- hdu 5587 Array(高效)
- HDU 5587 Array
- HDU 5587(Array-BigInteger)
- HDU 5587:Array
- hdu 5587 Array
- HDU 5587 Array
- HDU 5587 Array
- HDU 5587 Array
- hdu 5587 (Array)
- HDU 6197array array array(简单dp)
- HDU-5610 Array(枚举)
- hdu 6197 array array array
- HDU 6197 array array array
- HDU-Array
- Android开源项目第三篇——优秀项目篇
- Tomcat(8005,8080,8009)端口占用问题常见原因及解决方法
- maven的几个常用命令
- mybatis常用jdbcType数据类型
- 日记<1>
- HDU 5587 Array(递归)
- iOS开发 数据存取方法 对象归档
- HDU-新生赛-游乐场【模拟+贪心】
- QML之Item
- EasyDarwin EasyClient开源流媒体客户端源码功能框架解析
- 【Unity技巧】四元数(Quaternion)和旋转
- 初学maven 笔记一
- Spring事务配置的五种方式
- 赛式方法论:为什么你的游戏做不完、做得烂?