题目链接:https://ac.nowcoder.com/acm/contest/877/B
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

有一天Miss Quan出了一个题,给出一个长度为的数组
Miss Quan说给我计算下这个权值等于多少,然后随手写了一个式子,把她的小伙伴们都给惊呆了,这是什么鬼......
比如
听到这里,小伙伴们说这不是很简单吗,于是写出了下面的代码:

Miss Quan会心一笑,大家意识到事情并不简单,这个解法时间复杂度太高了,你能想出更好的计算Value的方法吗?只需要输出Value的值即可。

输入描述

第一行输入一个整数代表共有组数据
对于每组测试用例第一行输入一个整数第二行输入个数

输出描述

对于每组数据,输出一行,一个整数代表的值.

输入

2
3
1 4 2
2
10 20
1
4
5 6 8 7

输出

14
100
20

解题思路

题意:计算下式:

思路:
完全平方公式,拆分,合并。对于ai的平方各有n-1个,-2aiaj各1个,即:

#include <bits/stdc++.h>
using namespace std;
int main() {
    int t, n;
    long long x, ans1, ans2;
    scanf("%d", &t);
    while (t--) {
        scanf("%d", &n);
        ans1 = ans2 = 0;
        for (int i = 1; i <= n; i++) {
            scanf("%lld", &x);
            ans1 += x;
            ans2 += x * x;
        }
        printf("%lld\n", 1ll * n * ans2 - ans1 * ans1);
    }
    return 0;
}