标签:hdu
5 1 4 2 3 9 0
136HintIn the sample, b1=1, c1=4, b2=4, c2=4, b3=4, c3=2, b4=3, c4=9, b5=9, c5=9, so b1 * c1 + b2 * c2 + … + b5 * c5 = 136.
#include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; #define up(i,x,y) for(i=x;i<=y;i++) #define down(i,x,y) for(i=x;i>=y;i--) #define mem(a,b) memset(a,b,sizeof(a)) #define w(x) while(x) #define l 100005 #define ll __int64 #define s(a) scanf("%I64d",&a) ll vis[l],a[l],b[l],c[l],n,i,j,ans; int main() { w((s(n),n)) { up(i,1,n) s(a[i]); mem(vis,0); up(i,1,n) { if(vis[a[i]]) b[i]=a[vis[a[i]]]; else b[i]=a[i]; up(j,1,sqrt(a[i]*1.0)+1) { if(a[i]%j==0) vis[j]=vis[a[i]/j]=i; } } mem(vis,0); down(i,n,1) { if(vis[a[i]]) c[i]=a[vis[a[i]]]; else c[i]=a[i]; up(j,1,sqrt(a[i]*1.0)+1) { if(a[i]%j==0) vis[j]=vis[a[i]/j]=i; } } ans=0; up(i,1,n) ans+=b[i]*c[i]; printf("%I64d\n",ans); } return 0; }
HDU4961:Boring Sum,布布扣,bubuko.com
标签:hdu
原文地址:http://blog.csdn.net/libin56842/article/details/38705729