排队

【题目描述】

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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值