牛客練習賽29 F算式子
阿新 • • 發佈:2018-10-20
names space can i++ namespace using std png mes
一.題目
n個正整數(1\(\le\)a[i]\(\le\)m),對於[1,m]內每個x計算下式,最後求異或和。
二.思路
分成 \(\frac{a[i]}{x}\) \(\frac{x}{a[i]}\) 兩部分計算,兩個互為逆過程,意會一下就行。
三.代碼
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e6+5; ll a[N],s[N]; int main(){ int n,m,t; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&t),a[t]++; for(int i=1;i<=m;i++){ for(int j=i;j<=m;j+=i){ s[j]+=a[i]; } } for(int i=1;i<=m;i++) s[i]+=s[i-1]; for(int i=m;i>=1;i--) a[i]+=a[i+1]; ll ans=0; for(int i=1;i<=m;i++){ for(int j=i;j<=m;j+=i){ s[i]+=a[j]; } ans^=s[i]; } printf("%lld\n",ans); return 0; }
牛客練習賽29 F算式子