题目传送门
题目大意都应该能懂,下面直接讲思路。
按照题目说的顺序写代码即可,先输入
n
n
n 个整数,用一个累加器 sum
累加
n
n
n 个整数,然后将这
n
n
n 个整数从大到小排序后再输入
m
m
m 个整数,对于每次输入的数
q
q
q,用累加器减去数
q
q
q 作为下标所对应的数并输出即可。
要注意的是:
-
看数据范围,累加器用
int
的话会爆空间,所以必须开long long
才可通过此题。 -
为了方便,输入 n n n 个整数时,从下标 1 1 1 开始,这样进行完排序后, a [ q ] a[q] a[q] 所对应的数即为第 q q q 大的数。
这样看着舒服一点
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[300005];
int n,m,q;
long long sum;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
scanf("%d",&m);
sort(a+1,a+n+1,cmp);
for(int i=1;i<=m;i++){
scanf("%d",&q);
printf("%lld\n",sum-a[q]);
}
return 0;
}
完结撒花~~