排队

来源:互联网 发布:淘宝店铺解封软件 编辑:程序博客网 时间:2024/05/01 18:02

【题目描述】

h和小n在给小朋友们排队,有n(1<n≤100)个小朋友,序号为1到n,每个小朋友自身带着一个号码,他们排成一列,但号码不一定是有序的,现在小n问小h,如果从队列中随机抽取m(1≤m<n)个小朋友出列,求剩下小朋友中相邻两个小朋友号码乘积的总和。

【输入格式】

第一行一个整数n。

第二行n个整数ai(1≤ai≤100),分别表示第1到i个小朋友的号码。

第三行一个整数m。

第四行m个整数,表示出列的小朋友的序号(原本的序号,也就是说之前的出列对每个小朋友的序号没有影响)。

【输出格式】

一行一个整数表示相邻两个小朋友号码乘积的总和。

【输入样例】

10

14 87 28 29 49 27 84 10 65 43

7

1 3 5 7 8 9 10

【输出样例】

3306

【样例解释】

    去掉第1,3,5,7,8,9,10位置的数后,剩下的数为87 29 27,相邻两个小朋友号码乘积的总和为87*29+29*27=3306


分析

先把未出列的小朋友记下来,再求剩下小朋友中相邻两个小朋友号码乘积的总和。


程序:

var
n,i,j,p,m,s:longint;
tj:int64;
a,w,b:array[0..200]of longint;
begin
    fillchar(a,sizeof(a),1);
    readln(n);
    for i:=1 to n do
    read(w[i]);
    readln;
    readln(m);
    for i:=1 to m do
    begin
        read(b[i]);
        w[b[i]]:=0;
    end;
    p:=0;
    for i:=1 to n do
    if w[i]<>0 then
    begin
        inc(p);
        a[p]:=w[i];
    end;
    tj:=0;
    for i:=1 to p-1 do
    tj:=tj+a[i]*a[i+1];
    write(tj);
end.