p3396 雜湊衝突(暴力)
阿新 • • 發佈:2018-11-25
想了好久,沒想到優秀的解法,結果是個暴力大吃一靜.jpg
分類討論,預處理\(p\le \sqrt{n}\) 的情況,其他直接暴力,複雜度\(O(n \sqrt{n} )\)
#include <cstdio> #include <algorithm> #include <cstring> #include <cmath> using namespace std; int pre[400][400],a[150100],n,m; int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); for(int j=1;j<=sqrt(n);j++) pre[j][i%j]+=a[i]; } for(int i=1;i<=m;i++){ char cmd=getchar(); while(cmd!='A'&&cmd!='C') cmd=getchar(); if(cmd=='A'){ int x,y; scanf("%d %d",&x,&y); if(x<=sqrt(n)) printf("%d\n",pre[x][y]); else{ int ans=0; for(int i=y;i<=n;i+=x) ans+=a[i]; printf("%d\n",ans); } } else{ int x,y; scanf("%d %d",&x,&y); for(int i=1;i<=sqrt(n);i++) pre[i][x%i]-=a[x]; a[x]=y; for(int i=1;i<=sqrt(n);i++) pre[i][x%i]+=a[x]; } } return 0; }