[YDOI R1] Necklace 题解
或许更好的阅读体验/题目传送门
前置芝士
- 二项式定理:
(a+b)^n=\sum \limits_{i=0}^{n}C^i_n\times a^i\times b^{n-i} - 快速幂
Meaning
有
Solution
以下记
subtask 1
留给搜索。
每一颗珠子枚举是否选择,即有
时间复杂度
subtask 2
开始推式子。
对于第
时间复杂度
subtask 3
显然,subtask 2 的时间复杂度会 T 飞。
外面一层明显无法化简,此时回头看一眼二项式定理:
再看看里面那一坨式子:
稍微变下形:
这两个好像!
所以答案可以变为
由于原式中是从
故答案为
时间复杂度
code
杜绝复制!
#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[2000003],v[2000003];
int qpow(int a,int n,int mod)
{
int re=1;
while(n)
{
if(n&1)
re=(re*a)% mod;
n>>=1;
a=(a*a)%mod;
}
return re%mod;
}
signed main()
{
int n,ans=0,s=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],s+=a[i];
for(int i=1;i<=n;i++) cin>>v[i];
for(int i=1;i<=n;i++)
{
int cnt=0;
cnt=qpow(v[i]+1,a[i],1000000007)-1;
ans+=cnt*qpow(2,s-a[i],1000000007),ans%=1000000007;
}
cout<<ans;
return 0;
}