給出一個序列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