1 条题解
-
0
//计算每个ai对答案的贡献 //f[i]=max(a[i],a[2i],...,a[ki]) //那么对f排序,原问题中比f[i]小的数的个数,都可以选或者不选 //f排序后,ans+=f[i]*2^(i-1) #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1e5+10,mod=998244353; int n,a[N],f[N]; ll ans; ll pw(ll a,ll b) { ll ret=1; while(b) { if(b&1)ret=ret*a%mod; a=a*a%mod; b=b>>1; } return ret; } int main() { ios::sync_with_stdio(0);cin.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++) //时间复杂度为 nlog(n) { f[i]=a[i]; for(int j=i;j<=n;j+=i) if(a[j]>f[i])f[i]=a[j]; } //对f[i] 排序 sort(f+1,f+n+1); for(int i=1;i<=n;i++) ans=(ans+f[i]*pw(2,i-1))%mod; cout<<ans; return 0; }
- 1
信息
- ID
- 8736
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者