HDU 5439 Aggregated Counting(找規律+預處理)
題目連結:傳送門
題意:
根據題目的意思構造一個數列,然後設f(x)為x最後一次出現的位置,求f(f(x)).
分析:
我是找規律得出的結果。
val: 1 2 2 3 3 4 4 4 5 5 5
index: 1 2 3 4 5 6 7 8 9 10 11
val[i] = val[i]=val[i-val[val[i-1]]]+1;
寫了記住之後發現 f(f(x)) = sigma(val[i]*index[i]) 1<=i<=n;然後求和的時候將原來的數列按照val[i]相同的進行分組就好了。
程式碼如下:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#define IFOR(i,s,e) for(int i=s;i<e;i++)
using namespace std;
typedef long long LL;
const int maxn = 5e5;
const LL mod =1e9+7;
LL a[maxn];
LL sum[maxn];
LL tot[maxn];
LL quick_mod(LL a,LL b){
LL ans = 1;
while(b){
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans;
}
const LL inv = quick_mod(2LL,mod-2);
void init(){
a[1]=1;
sum[0]=0;
sum[1]=1;
IFOR(i,2,maxn){
a[i]=a[i-a[a[i-1]]]+1;
sum[i]=sum[i-1]+a[i];
}
tot[0]=0;
IFOR(i,1,maxn){
tot[i]=tot[i-1];
LL tmp = (sum[i-1]+1+sum[i])*a[i]%mod*(LL)i%mod*inv%mod;
tot[i]=(tot[i]+tmp)%mod;
}
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--){
LL n;
scanf("%I64d",&n);
int pos = lower_bound(sum,sum+maxn,n)-sum;
if(sum[pos]==n) printf("%I64d\n",tot[pos]);
else{
pos--;
LL num = tot[pos];
num = (num+(pos+1)*(n+sum[pos]+1)%mod*(n-sum[pos])%mod*inv%mod)%mod;
printf("%I64d\n",num);
}
}
return 0;
}
相關文章
- HDU5139 Formula (找規律+離線處理)ORM
- HDU 6298 Maximum Multiple(找規律)
- HDU 4951 Multiplication table(找規律)
- HDU 5795 A Simple Nim (SG函式+打表找規律)函式
- HDU-6415 Rikka with Nash Equilibrium (DP/找規律)UI
- 打表找規律
- HDU 2897-邂逅明下(博弈-SG函式打表找規律)函式
- HDU 1847 Good Luck in CET-4 Everybody!(找規律版巴什博奕)Go
- HDU 1847-Good Luck in CET-4 Everybody!(博弈-SG函式/找規律)Go函式
- HDU 2478 Slides(瞎搞,預處理)IDE
- HDU 4455 Substrings(預處理+dp)
- HDU 5317 RGCDQ (素因子分解+預處理)GC
- HDU4342 History repeat itself數學規律題
- HDU3944 DP? (LUCAS定理+階乘預處理)
- 資料預處理規則
- Touring cities (找規律 哈密爾頓迴路)
- 數學規律題,數論知識:hdu1792
- LeetCode-6. Z字形變換(找規律)LeetCode
- codeforces 340CTourist Problem(找規律數學題)
- HDU4675 GCD of Sequence(預處理階乘逆元+推公式)GC公式
- HUNAN -11566 Graduation Examination(找規律)NaN
- Gym - 101532A Subarrays Beauty(位操作找規律)
- 【組合數+找規律】codeforces 815B - Karen and Test
- QOJ7789-一道位運算找規律好題
- HDU 1792 - A New Change Problem(規律,最大不能組合數及其個數)
- HDU 3682To Be an Dream Architect(統計規律題目 三線相交bug)
- ZOJ Monthly, January 2019 - A Little Sub and Pascal's Triangle(找規律)
- 影像預處理
- 預處理指令
- 預處理命令
- EMS單號規律與順豐單號規律(C#)C#
- 6-電子商務規律與倫理道德
- HDU 4542 小明系列故事——未知剩餘系 (DFS 反素數 篩子預處理)
- A Multiplication Game (博弈,規律)GAM
- hdu4288 離線處理線段樹
- hdu 1753 Java 高精度處理 大明A+BJava
- 資料預處理
- 影像預處理方法