2018 沈阳 ICPC
Posted -zzz-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018 沈阳 ICPC相关的知识,希望对你有一定的参考价值。
A题:巴什博弈
J题:算贡献值,解决很多很多个区间的问题
题意:求for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) sum += f[i][j]; f[i][j]表示在序列从 i 位乘到第 j 位所形成的新的数的 不同质因子的个数.
分析:算贡献值,解决很多很多个区间的问题
#include <cstdio> #include <cstring> #include <algorithm> #include <set> using namespace std; const int maxn = 1e6+5; int a[maxn]; int pos[maxn]; int pri[maxn]; int cnt; void getpri(int x){ cnt=0; for(int i=2; i*i<=x; i++){ if(x%i==0){ pri[++cnt] = i; while(x%i==0){ x/=i; } } } if(x>1) pri[++cnt] = x; } int main(){ int n; long long ans=0; scanf("%d",&n); for(int i=1; i<=n; i++){ scanf("%d",a+i); } for(int i=1; i<=n; i++){ getpri(a[i]); for(int j=1; j<=cnt; j++){ int k=pos[ pri[j] ]; pos[ pri[j] ] = i; ans += (long long)(i-k)*(n-i+1); } } printf("%lld ", ans); }
以上是关于2018 沈阳 ICPC的主要内容,如果未能解决你的问题,请参考以下文章
ACM-ICPC 2018 沈阳赛区网络预赛 DMade In Heaven