AcWing第130周周赛

给定一个长度为 n 的整数数组 a0,a1,…,an−1。

函数 sum(l,r)定义如下:

  • 如果 l=r,则 sum(l,r)=0。
  • 如果 l<r,则 sum(l,r)=

请你找到一个整数三元组 (x,y,z),要求:

  1. 0≤x≤y≤z≤n
  2. sum(0,x)−sum(x,y)+sum(y,z)−sum(z,n) 的值尽可能大。

输出一个满足条件的整数三元组 (x,y,z)。

输入格式

第一行包含整数 n。

第二行包含 n 个整数 a0,a1,…,an−1。

输出格式

在一行内输出三个整数,表示满足条件的整数三元组 (x,y,z)。

如果答案不唯一,输出任意合理答案均可。

数据范围

前 44 个测试点满足 1≤n≤5。
所有测试点满足 1≤n≤5000,−10^9≤ai≤10^9。

输入样例1:
3
-1 2 3
输出样例1:
0 1 3
输入样例2:
4
0 0 -1 0
输出样例2:
0 0 0
输入样例3:
1
10000
输出样例3:
1 1 1
import java.util.*;
public class Main{
	static long[] s;
	public static void main(String args[]){
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        s=new long[n+1];
        int rx=Integer.MIN_VALUE,ry=Integer.MIN_VALUE,rz=Integer.MIN_VALUE,z=n;
        long max=Integer.MIN_VALUE;
        for(int i=1;i<=n;i++) {
        	s[i]=s[i-1]+scan.nextInt();
        }
        for(int y=n;y>=0;y--) {
        	for(int x=0;x<=y;x++) {
        		if(getsum(y,n)<getsum(z,n)) {
        			z=y;
        		}
        		long t=s[n]-2*getsum(x,y)-2*getsum(z,n);
        		if(t>max) {
        			max=t;
            		rx=x;
            		ry=y;
            		rz=z;
            	}
        	}
        }
        System.out.printf(rx+" "+ry+" "+rz);
    }
	public static long getsum(int l,int r) {
		return s[r]-s[l];
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值