J Tokitsukaze and Sum of MxAb【2023牛客寒假算法基础集训营2】

J Tokitsukaze and Sum of MxAb

原题链接

题意

  • 给出长为n的序列,对于所有的i,j求max(|aiaj|,|ai+aj|)之和

思路

  1. 对于两个负数aiaj,max(|aiaj|,|ai+aj|)=aiaj
  2. 对于两个正数aiaj,max(|aiaj|,|ai+aj|)=ai+aj
  3. 对于一个正数ai和一个负数aj,max(|aiaj|,|ai+aj|)=aiaj
  4. 综上,可以得出负数都变为了正数,且求max(|aiaj|,|ai+aj|)之和的过程中每个数被计算了2n次,可以将问题转化为,将负数转化为正数后求2n个前缀和

代码

点击查看代码
#include<algorithm>
#include<iostream>
using namespace std;

#define prep(i,a,b) for(int i = (a); i <= (b); i ++)
#define rrep(i,a,b) for(int i = (a); i >= (b); i --)

typedef long long LL;
const char nl = '\n';
int T, n, m;
const int N = 1e5 + 10;
LL a[N];	//注意求和的数据范围

void solve() {
	res = 0;
	cin >> n;
	prep(i,1,n){
		cin >> a[i];
		if(a[i] < 0)a[i] *= (-1);
		a[i] += a[i - 1];
	}

	cout << 2*n*a[n] << nl;

}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> T;
	while (T--) {
		solve();
	}
	return 0;
}

posted @   Keith-  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示