列表

详情


NC25344. Help Me

描述

有一天Miss Quan出了一个题,给出一个长度为的数组

Miss Quan说给我计算下这个权值等于多少,然后随手写了一个式子,把她的小伙伴们都给惊呆了,这是什么鬼......

比如

听到这里,小伙伴们说这不是很简单吗,于是写出了下面的代码:

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

输入描述


第一行输入一个整数代表共有组数据

对于每组测试用例第一行输入一个整数第二行输入个数


输出描述


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



示例1

输入:

2
3
1 4 2
2
10 20

输出:

14
100

示例2

输入:

1
4
5 6 8 7

输出:

20

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 73ms, 内存消耗: 712K, 提交时间: 2020-03-11 19:06:16

#include<bits/stdc++.h>
using namespace std;
long long a[100010];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		long long sum=0,ans=0;
		cin>>n;
		for(int i=1;i<=n;i++)
		{
			scanf("%lld",&a[i]);
			sum=sum+a[i];
			ans=ans+a[i]*a[i];
		}
		cout<<n*ans-sum*sum<<endl;
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 57ms, 内存消耗: 504K, 提交时间: 2019-04-25 15:24:22

#include<cstdio>
int T,n,m;
long long x,y;
int main(){
	scanf("%d",&T);
	for(int t=1;t<=T;t++){
		scanf("%d",&n);x=y=0;
		for(int i=1;i<=n;i++){
			scanf("%d",&m);
			x=x+m*m;
			y=y+m;
		}
		printf("%lld\n",1ll*n*x-y*y);
	}
	
}

上一题