首页 > 其他分享 >AT_arc174_a [ARC174A] A Multiply 题解

AT_arc174_a [ARC174A] A Multiply 题解

时间:2024-03-26 19:33:43浏览次数:25  
标签:int 题解 ans long fd max Multiply ARC174A

题目翻译

给你一个长度为 \(N\) 的整数序列, \(A=(A_1,A_2,…,A_N)\) ,和一个整数 \(C\) 。

在执行以下操作最多一次后,找出A中元素的最大可能和:

选择两个整数 \(l\) 和 \(r\) ( \(1≤l≤r≤N\) ),

将 \(A_l,A_{l+1},…,A_r\) 分别乘以 \(C\) 。

算法

法一(暴力)

可以 \(O_{(N^2)}\) 暴力枚举 \(l\) 和 \(r\) 。

法二(正解)

前置知识:最大子段和

参考该题思路,我们可以求出最大子段和,来最大化 \(C\) 乘上的区间和

代码如下:

#include<bits/stdc++.h>
#define int long long
#define fd(i,a,b) for(int i=a;i<=b;i=-~i)
using namespace std;
int n,c,a[300100],f[300100],sum[300100],maxx=-1e6,ans=0;
signed main()
{
	ios::sync_with_stdio(0);
	cin>>n>>c;
	fd(i,1,n) cin>>a[i],sum[i]=sum[i-1]+a[i],maxx=max(a[i],maxx);
	//前缀和
	if(c>0&&maxx<0)//全负且c>0
	{
		cout<<sum[n];
		return 0;
	}
	if(c<=0)
	{
		fd(i,1,n) a[i]=-a[i];//将C<=0的情况转化为c>0的情况
	}
	fd(i,1,n)
	{
		if(i==1) f[i]=a[i];
		else f[i]=max(a[i],f[i-1]+a[i]);
		ans=max(ans,f[i]);
	}
	if(c>0) cout<<sum[n]+ans*(c-1);
	else cout<<sum[n]+ans*(1-c);
	//这里减一是因为sum[n]已经加过一次了
	return 0;
}

无关的话(审核大大,求过审):被禁言了,怎么解啊?

感谢观看!

标签:int,题解,ans,long,fd,max,Multiply,ARC174A
From: https://www.cnblogs.com/whrwlx/p/18097394

相关文章

  • 20240326每日一题题解
    20240326每日一题题解Problem给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。2<=......
  • 问题解答:ABAP 关键字 ANY TABLE 的使用场合深入剖析
    本教程下面这篇讲述ABAP动态编程的文章,有朋友提问:127.答网友疑问:ABAPFunctionModule如何支持内表结构不确定的动态输入参数汪老师,我这边定义了一个ANYTABLE,但是报错,说是没有这个类型,我在SE38定义的时候也报错,只有用FIELD-symbols定义才不会报错,所以就很好奇为什......
  • ccf-csp-2020-12-2期末预测之最佳阈值(c++满分题解)
    这个题暴力是可以有70分的,下面是暴力代码:(注释写的比较清楚了,也很好理解)#include<iostream>#include<vector>#include<set>#include<algorithm>usingnamespacestd;boolsort1(pair<int,int>vec1,pair<int,int>vec2)//对阈值从小到大排序{ returnvec1.first<=ve......
  • [题解] BZOJ4203 同桌的你
    题意给出\(n\)个人的性别\(b_i\)、喜欢的人\(a_i\)(有且仅有一个)。现在两人分一组,若一组中存在一人喜欢另一人,则称这一组为「满意」的。要求在最大化「满意」组数的前提下最大化男女同桌组数,并构造分组方案。思路考虑建图,从\(i\)到\(a_i\)连一条有向边,转化为基环树上......
  • AGC018C Coins 题解
    模拟费用流。传送门题意:共\(n=x+y+z\)个人,每个人可以选择获得\(a_i\)个金币或\(b_i\)个银币或\(c_i\)个铜币。要选\(x\)个人拿金币,\(y\)个人拿银币,\(z\)个人拿铜币。问币数总和最大是多少。\(n\le10^5\)。先建出费用流模型:把一个人的选择视作一个人流到了金币/......
  • Atcoder ABC 346 全题解
    闲话上一篇全题解反向不错,如果大家支持我就会继续更。我ABC也打了,ARC也打了,没打好,疯狂掉大分……包括本场比赛也是整整补了EFG三道题,以及ARC死磕D结果使赛后五分钟AC又有素材了……A懒得讲B由于我被B题坑了,所以在此纪念。最简单的方法就是把字符串复制......
  • 20240325每日一题题解
    20240325每日一题题解Problem给出一个整数\(a\)和一个正整数\(n\),求乘方\(a^n\)。输入一行,包含两个整数\(a\)和\(n\)。\(-1000000\lea\le1000000\),\(1\len\le10000\)。输出一个整数,即乘方结果。题目保证最终结果的绝对值不超过\(1000000\)。样例输入23样......
  • 动态尺寸加载libpag文件白边问题解决方案
    加载pag文件时,最理想的情况是canvas的宽高和pag资源文件的宽高一致,或比例一致。否则就会出现四周白边(页面底色),除非是按平铺的样式进行设置(源码暂未找到对应方法)。而对于页面宽高不定的情况下,就无法保证pag文件能适配页面,如果pag文件底色和父级页面底色不一致,就会表现出来......
  • CSP-S 2023 题解
    T1听说有歧义?希卓没看懂。不过真的水。你看能把它拧成什么正确密码。#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;LLn,sum,a[10][6],p,b[10][6];LLf[100010];intmain(){ scanf("%lld",&n); for(inti=1;i<=n;i++) { for(intj=1;j<=5;j++)......
  • CSP-J 2023 题解
    T1这么水?!赛时AC。思路:小学数学题,我孙子都会做认真点。就是余数和商,小学二年级的知识(毕导:亻尔女子)代码:#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;LLn,sum;LLt(LLa){ if(a!=1)return1+t(a-((a-1)/3+1)); elsereturn1;}intmain(){......