HDU-4961 Boring Sum STL模拟

2015-07-20 17:37:04 · 作者: · 浏览: 5

给出一个序列A,对于A里面的每个元素,左边最近的能被它整除的元素记为B序列对应位置的,右边最近的是它的整数倍的元素记为C序列对应位置,找不到的记它本身,最后算出对应位置B*C的总和。

容器模拟,按顺序扫一遍,每次如果有符合条件的取出来,即为最近的。最后把它的下标放到对应位置的容器中,然后倒序求一遍,最后求和。

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           using namespace std; const int maxn=100010; vector
          
           p[maxn]; int n; int a[maxn]; int b[maxn]; int c[maxn]; int main() { while(scanf("%d",&n)!=EOF) { if(n==0) { break; } for(int i=0;i
           
            =0;i--) { for(int j=1;j<=sqrt(a[i]);j++) { int u=j; if(a[i]%j==0) { for(int k=0;k