hdu-5587 Array(递归)
Array
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 592 Accepted Submission(s): 284
One day she gets an array {1}。 After that, every day she copies all the numbers in the arrays she has, and puts them into the tail of the array, with a signle '0' to separat.
Vicky wants to make difference. So every number which is made today (include the 0) will be plused by one.
Vicky wonders after 100 days, what is the sum of the first M numbers.
First line contains a single integer T, means the number of test cases.(1≤T≤2∗103)
Next T line contains, each line contains one interger M. (1≤M≤1016)
1
3
5
4
7
Statistic | Submit | Discuss | Note
Home | Top | Hangzhou Dianzi University Online Judge 3.0 Copyright 2005-2016 HDU ACM Team. All Rights Reserved. Designer & Developer: Wang Rongtao LinLe GaoJie GanLu Total 0.000000(s) query 1, Server time : 2016-01-02 14:06:15, Gzip enabled |
Administration |
规律题;
思路:可以写一下前几项的式子。
- 1
- 112
- 1121223
- 112122312232334
- ......
那么求把每项的和的递推公式就是a[n]=2*a[n-1]+2n-1.
每项有2n-1个数,然后打表。打到2n-1<=1e16;
然后递归求解。复杂度为log(n);
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 const long long N=1e16;
7 typedef long long ll;
8 void ss(ll n,ll k);
9 ll a[60];
10 ll sum=0;
11 using namespace std;
12 int main(void)
13 {
14 ll i,j,k,p,q,M;
15 a[1]=1;
16 for(i=2; (ll)1<<i<=N; i++)
17 {
18 a[i]=a[i-1]*2+((ll)1<<(i-1));
19
20 }//打表(ll)1强制将1转为64位的。不然会爆
21 scanf("%lld",&k);//k值可求得为54;
22 while(k--)
23 {
24 sum=0;
25 scanf("%lld",&M);
26 ss(M,0);
27 printf("%lld\n",sum);
28 }
29 return 0;
30
31 }
32 void ss(ll n,ll k)
33 {
34 ll i,j,p,q;
35 for(i=1; i<=54; i++)
36 {
37 if(n==((ll)1<<(i))-1)//如果所求的位数正好是上面打表中an的某一项就是对应那项加上项数*翻的倍数。
38 {
39 sum+=a[i]+k*(((ll)1<<i)-1);
40 return ;
41 }
42 else if(((ll)1<<(i))-1>n)//找前面的比n小的an
43 {
44 break;
45 }
46
47 }
48 ll pp=k*(((ll)1<<(i-1))-1)+a[i-1]+k+1;//前一项an和(k+1)中间多加的0那个点对应的此时的值。
49 sum+=pp;
50 ll qq=n-((ll)1<<(i-1));//剩下后面没求位数
51 if(qq==0)
52 {
53 return ;
54 }
55 ss(qq,k+1);
56 }
hdu-5587 Array(递归)的更多相关文章
- hdu 5587 Array
题目链接:hdu 5587 前两周 bc 上的题了,因为赶大作业所以没有去打,看了下官方给出的思路,感觉好强大~~竟然能转化成求二进制数 1 的个数: 然后数位 dp 就行了, #include< ...
- hdu 5587 Array 数学题
Array Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5587 De ...
- hdu 5587 Array 二分
Array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem ...
- HDU 5587——Array——————【规律】
Array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Sub ...
- 2019年CCPC网络赛 HDU 6703 array【权值线段树】
题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...
- HDU 5587:Array
Array Accepts: 118 Submissions: 232 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/ ...
- HDU 6197 array array array 2017沈阳网络赛 LIS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6197 题意:给你n个数,问让你从中删掉k个数后(k<=n),是否能使剩下的序列为非递减或者非递增 ...
- hdu 1005 1021 递归超限 找规律 // 只要看题中n较大都是有规律的
因为n>1000000000所以用递归 数组超限, 由递归函数f(n)=(A*f(n-1)+B*f(n-2))%7; 因为是除7的余数 因次一共有7*7=49种情况, 以后的值都和之前的对应相等 ...
- hdu 6197 array array array
array array array Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 2017多校第10场 HDU 6172 Array Challenge 猜公式,矩阵幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6172 题意:如题. 解法: #include <bits/stdc++.h> using ...
随机推荐
- 通过yum安装 memcache
. 通过yum安装 复制代码代码如下: yum -y install memcached#安装完成后执行:memcached -h#出现memcached帮助信息说明安装成功 2. 加入启动服务 复制 ...
- centos安装后的个人工具
1.安装vim工具 yum -y install vim 安装完成后在家目录下新建一个.vimrc的配置文件.辅助vim软件功能. set number " 显示行号 set cursorl ...
- .NET Core如何配置TLS Cipher(套件)?
前言 前不久我发表了一篇关于TLS协议配置被我钻了空子,经过第三方合作伙伴验证,针对此TLS协议存在不安全套件,急催速速解决,那么我们本篇开始继续整活!第三方合作伙伴对平台安全严苛要求,我们已连续发版 ...
- 逻辑学与Prolog学习笔记
int a = 3 + 5; 很自然.如果Matrix a, b要加呢?没有运算符重载,a + b是不行的,只能add(a, b). int a = add(3, 5)也行.如果函数名可以用+呢?+( ...
- accurate, accuse
accurate accurate(不是acute)和precise是近义词,precise里有个pre,又和excise(切除, 不是exercise),concise一样有cise.Why? 准确 ...
- Linux基础命令---lynx浏览器
lynx lynx是一个字符界面的全功能www浏览器,它没有图形界面,因此占用的资源较少. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 ...
- Oracle SQL中join方式总结
在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结).SQL JOIN其实是一个逻辑概念,像NEST LOOP JOIN. HASH JOIN等 ...
- 使用jquery刷新页面以及javascript的一些基本函数
如何使用jquery刷新当前页面 下面介绍全页面刷新方法:有时候可能会用到 1.window.location.reload()刷新当前页面. 2.parent.location.reload()刷新 ...
- Properties类继承HashTable类,一般用来给程序配置属性文件。
package com.itcast.demo04.Prop;import jdk.internal.util.xml.impl.ReaderUTF8;import sun.nio.cs.UTF_32 ...
- java通过jdbc连接数据库并更新数据(包括java.util.Date类型数据的更新)
一.步骤 1.获取Date实例,并通过getTime()方法获得毫秒数: 2.将获取的毫秒数存储到数据库中,注意存储类型为nvarchar(20): 3.读取数据库的毫秒数,作为Date构造方法的参数 ...