排队
【题目描述】
小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.