HDU 6304 Chiaki Sequence Revisited [找規律+二分]
題意
定義a[n]的遞推式,求a[i]的前n項和。
題解
通過打表可以簡單的找出規律,從一開始每個數出現次數的是1,2,1,3,1,2,1,4……,其規律是前2^i項由前2^(i-1)的數,複製一遍,並將第2^i項的數+1。通過這個規律,我們可以先記錄前2^i個數的出現次數和,通過二分的思想求出a[n]。為了求出前n項和,我們還可以發現出現次數為i次的數的首相是2^(i-1),公差是2^i。那麼通過這個規律,我們只要枚舉出現的次數,然後計算數字和即可得到答案。
AC程式碼
#include<stdio.h>
#include<iostream>
using namespace std;
#define mod 1000000007
typedef long long ll;
ll a[105],f[105];
int main()
{
ll T;
scanf("%lld",&T);
a[0]=f[0]=1;
for(ll i=1;i<=62;i++)a[i]=a[i-1]*2+1,f[i]=f[i-1]*2;
ll inv=(mod+1)/2;
while(T--)
{
ll pos=0,n,m,ma=-1,ans=0;
scanf("%lld",&n);
m=n;
for(ll i=62;i>=0 ;i--)
if(m-a[i]>=0)
m-=a[i],pos=pos+(1ll<<i);
pos+=(m>0);
ll now=pos-1,num=0;
for(ll i=1;f[i-1]<=now;i++)
{
ll s=f[i-1],step=(now-s)/f[i]+1,e=(step-1)*f[i]+s;
ll haha=(s+e)%mod*(step%mod)%mod*inv%mod;
ans=(ans+haha*i %mod)%mod;
num+=step*i;
}
ans=(ans+1+(n-num-1)%mod*(pos%mod)%mod)%mod;
printf("%lld\n",ans);
}
}
相關推薦
HDU 6304 Chiaki Sequence Revisited [找規律+二分]
題意 定義a[n]的遞推式,求a[i]的前n項和。 題解 通過打表可以簡單的找出規律,從一開始每個數出現次數的是1,2,1,3,1,2,1,4……,其規律是前2^i項由前2^(i-1)的數,複製一遍,並將第2^i項的數+1。通過這個規律,我們可以先記錄前2
2018 Multi-University Training Contest 1 hdu 6304 Chiaki Sequence Revisited(規律?數學?)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6304 題意:看一眼就懂了 做法:找規律,每個數出現的次數k,滿足以2^k差為2^k+1的等差數列,然後就可以了,然後正解是差分,阿貝爾變換,本人不會 程式
[HDU-6304] Chiaki Sequence Revisited
an={1an−an−1+an−1−an−2n=1,2n≥3an={1n=1,2an−an−1+an−1−an−2n≥3 求 ∑i=1naimod1000000007∑i=1naimod1000000007 There are multiple te
6304 Chiaki Sequence Revisited[2018杭電多校聯賽第一場 G](找規律+位運算+逆元)
【題意】 給定一個序列a,定義a[1]=a[2]=1,a[n]=a[n-a[n-1]]+a[n-1-a[n-2]](n>=3),求該序列的前n項和是多少,結果對 1e9+7 取模 【輸入格式】 第一行為資料組數T(T<1e5),下面T行每行
6304 Chiaki Sequence Revisited
題目連結 題意:給出了個計算a[i]的公式,然後讓你求a[1~n]的和。 分析:好的,我們簡單粗暴的先打個表,發現規律(個屁),每一個a[i]出現的次數是lowbit(a[i])長度次,比如16出現的次數是lowbit(16) = 10000,長度為
HDU 1005 Number Sequence(找規律,思維)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 153140 Accepted Submissio
Chiaki Sequence Revisited HDU - 6304 lowbit找規律法
otto article ast ati spa span n-1 display number Problem Description Chiaki is interested in an infinite sequence a1,a2,a3,..., which is
HDU 6304 2018 HDU多校第一場 Chiaki Sequence Revisited(二分+倍增規律)
Chiaki Sequence Revisited Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1717
2018年hdu多校1007 Chiaki Sequence Revisited(謎之Meta-Fibonacci,二分+求n!中a出現的次數)
題目大意:求Meta-Fibonacci的字首和。 謎之求和,打表得到前幾項發現是,1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9.......明顯除了1之外,其他數字出現的次數跟它當中含有2的冪次有關,比如奇數中不含有2,所以只出現1次,而
2018 多校聯賽第一場1007:Chiaki Sequence Revisited(HDU 6304)
題意:給出一個數列的遞推式,求前n項和。 (因為圖片載入不上,遞推式自己去HDU6304看吧) 思路:這個題的n非常大(預處理不現實,所以先找規律吧),並且查詢的組數T<=1e5,(T非常大)所以一定是一個log級別的查詢 我的思路跟題解可能不太一樣,我下面寫
杭電多校第一場 Chiaki Sequence Revisited(找規律)
Chiaki Sequence Revisited Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1624
hdu 6304 多校第一場 Chiaki Sequence Revisited
//#include <bits/stdc++.h> #include<stdio.h> #include<string.h> #include<string> #include<math.h> #in
6304】Chiaki Sequence Revisited
@Chiaki Sequence [email protected] @題目描述[email protected] Chiaki is interested in an infinite sequence a1,a2,a3,
HDU 5793 A Boring Question (找規律 : 快速冪+乘法逆元)
cnblogs and ott miss 逆元 找規律 -- for while A Boring Question Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot
2017多校第7場 HDU 6129 Just do it 找規律
ble nbsp bool name def ons spa esp bre 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6129 題意:求a序列後m次xor前綴和 解法: 手動對1位置對每個位置的貢獻打表發現 第一次 貢
hdu 6129 Just do it 找規律
-- std div its 題解 turn 個數 using const 題意很好理解 問你一個數組 按照他的規則處理m次之後是什麽樣的 看到這道題我一開始也沒什麽思路 但是我列了五個數 把它們m≤4的都算出來之後發現 如果m把化成二進制的這一位是1
HDU 1041 Computer Transformation(找規律加大數乘)
esp ios ctype nsf printf stream ont tac tran 主要還是找規律,然後大數相乘 #include<stdio.h> #include<string.h> #include<math.h> #inc
HDU 3788——ZOJ問題(找規律)
題目連結 從樣例中找到其規律 就是第一次出現z的之前字元的個數 ×第一次出現z和最後出現j之間的‘o’的個數(且不能為空)=最後出現j之後的字元個數Accepted;(同理zoj也適用) #include<iostream> #include<set> #incl
HDU 5601 N*M bulbs (找規律)
#include<bits/stdc++.h> using namespace std; #define debug puts("YES"); #define rep(x,y,z) for(int (x)=(y);(x)<(z);(x)++) #def
HDU 1061暴力打表找規律
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/O