当前位置: 首页 > article >正文

题海拾贝:P8772 [蓝桥杯 2022 省 A] 求和

          Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

91bfeb2bb1414a2ebf09cbc4f9706779.gif

我的博客:<但凡.

我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》

欢迎点赞,关注!

1、题目

ef2d7318c24742c28da2c42559e0545e.png

2、题解 

        这题其实并不难想,甚至说都不用想,上来直接就for循环嵌套,但这样想都不用想,时间度都干O(N)了他肯定拿不了满分。

        在这我就不写错的那个了,免得误导大家。发现时间度太高了肯定得降,那我们之前说你两个for循环不嵌套的话就是N,那就想办法把for循环拿出来呗,反正你不嵌套你写多少个for他也是O(N)。

        我们试着写出来几个就能发现规律了。假设我们n等于5,a1就乘了个a2,a3,a4,a5,我们根据乘法结合律把它写成a1*(a2+a3+a4+a5),现在我们只需要提前写个for循环,把ai需要乘的那几个数加和就OK了。但需要注意的是,求和的时候你也不能嵌套for循环,不然咱时间复杂度还是O(n),咱们让第i个数该乘的数的和 等于 第i-1个数该乘的数的和 减去 第i个数就好了。

        还有,就是千万别忘了开辟成long long,注意数据范围。十年 OI 一场空,不开 long long 见祖宗!

#include<iostream>
using namespace std;
long long a[200005] = { 0 };
long long b[200005] = { 0 };
int main()
{
	int n = 0;
	int i = 0;
	cin >> n;
	long long S = 0;
	int j = 0;
	while(i<n)
	{
		cin >> a[i];
		i++;
	}
	for (i = 1;i < n;i++)
	{
		b[0] = b[0] + a[i];
	}
	for (i = 1;i < n;i++)
	{
		b[i] = b[i-1] - a[i];
	}
	for (i = 0;i < n;i++)
	{
		S = S + a[i] * b[i];
	}
	cout << S;
	return 0;
}

        好了,今天的内容就分享到这,我们下期再见!

 


http://www.kler.cn/a/443394.html

相关文章:

  • C#语言的网络编程
  • 【Linux 之 二十 】使用 ln 命令创建符号链接
  • Qt 界面外观
  • c++类和对象---上
  • LeetCode 3019.按键变更的次数:遍历(转小写)
  • Express 加 sqlite3 写一个简单博客
  • 在Visual Studio Code (VSCode) 中将终端输出重定向到一个文本文件中
  • 如何在Playwright中操作窗口的变化
  • 【SH】Ubuntu Server 24搭建Web服务器访问Python程序研发笔记
  • 在Rocky Linux中安装【Jenkins】的详细指南
  • Python MySQL 进阶用法详解
  • TRELLIS,一键生成3D模型,图像转3D,微软开源
  • MYSQL语法
  • 【人工智能】从TF-IDF到BERT:Python实现文本分类的全面指南
  • 12.7深度学习_经典神经网络_VGG
  • 八、Hbase
  • 数字设计工程师学习路线:从基础到高阶的全面指南
  • 什么,不用 Tomcat 也能运行 Java web?
  • 4.redis通用命令
  • API超越应用的时代,深入了解F5 API安全解决方案
  • 接口文档案例
  • 以太网帧、IP数据报图解
  • 【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
  • 在Ubuntu中配置mysql,并允许外部访问数据库
  • 在源码中编译c执行程序
  • C语言贪吃蛇项目