51goc 637.可表示的数 题解

51goc 637.可表示的数 题解51goc637.可表示的数题解题目描述有N个整数从左到右排成一行,如果某个数等于它前面的2个数的和,就称这个数是可以表示的数。问给定的数列里有多少个数是可以表示的数。输入格式第一行1个整

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

51goc 637.可表示的数 题解

题目描述

N个整数从左到右排成一行,如果某个数等于它前面的2个数的和,就称这个数是可以表示的数。问给定的数列里有多少个数是可以表示的数。

输入格式

第一行1个整数N,表示数列有多少个整数。1<=N<=10000

第二行N个正整数,每个正整数不超过10000

输出格式

一个整数,有多少可表示的数。

原题链接

637.可表示的数


题意分析

本题让我们输入一个数组,遍历数组,在0i - 1的范围里查找2个数,与a[i]相等


解题思路

错误思路❌

用三循环,依次遍历数组,如果在0i - 1的范围内有符合条件的数时,答案+1

但是本题n的范围是10000,极端情况要计算1666 1667 0000次,评测系统一秒内只能计算1 0000 0000次,所以会超时。


正确思路✔

可以定义一个bool数组,来存前面出现过某两个数的和。

const int N2 = 1000010;

bool sum[N2];

然后遍历数组,在循环中,把a[i]0i - 1的数分别计算加和,把sum[a[i] + a[j]]标记为true

再判断sum[a[i]]是否为true即可.

注意:判断应在第二重循环前,因为是在a[i]之前找数。

long long res = 0;
for (int i = 1; i < n; i ++ )
{
    if (sum[a[i]])
        res ++ ;
    for (int j = 0; j < i; j ++ )
        sum[a[i] + a[j]] = true;
}

正确代码最多计算49995000次,评测系统一秒内能计算1 0000 0000次,所以不会超时。


解题反思

做题时,使用for循环,要考虑时间复杂度


参考代码

错误思路❌ 代码
#include <bits/stdc++.h>

using namespace std;

const int N = 10010;

int a[N]; // 定义数组

int main()
{
    int n;
    cin >> n; // 输入n
    
    for (int i = 0; i < n; i ++ ) cin >> a[i]; // 输入数组
    
    long long res = 0;
    for (int i = 0; i < n; i ++ ) // 最外层循环,遍历整个数组
    {
    	bool ff = true; // 如果判断过这个数,就退出第二层循环
    	for (int j = 0; j < i; j ++ )
    	{
    		if (!ff) break; // 如果找到了答案,就退出循环
    		for (int k = j + 1; k < i; k ++ )
    			if (a[j] + a[k] == a[i])
    			{
    				ff = false;
    				res ++ ;
    				break;
    			}
    	}	
    }
    
    cout << res << endl; // 输出答案
    
    return 0;
}
正确思路✔ 代码
#include <bits/stdc++.h>

using namespace std;

const int N1 = 10010;

int a[N1]; // 定义输入的数组

const int N2 = 1000010;

bool sum[N2]; // 定义存和的数组

int main()
{
    int n; 
    cin >> n; // 输入n
    
    for (int i = 0; i < n; i ++ ) cin >> a[i]; // 输入数组
    
    long long res = 0; // 定义答案变量
    for (int i = 1; i < n; i ++ )
    {
        if (sum[a[i]]) // 判断如果前面两个数的和是a[i]
            res ++ ; // 答案加1
        for (int j = 0; j < i; j ++ )
            sum[a[i] + a[j]] = true; // 计算a[i] + a[j]的和
    }
    
    cout << res << endl; // 输出答案
    
    return 0;
}

笔记

复杂度 数量级 最大规模
O(logN) >> 10 ^ 20 很大
O(N^1 / 2) 10 ^ 12 10 ^ 14
O(N) 10 ^ 6 10 ^ 7
O(NlogN) 10 ^ 5 10 ^ 6
O(N ^ 2) 1000 2500
O(N ^ 3) 100 500
O(N ^ 4) 50 50
O(2 ^ N) 20 20
O(3 ^ N) 14 15
O(N!) 9 10
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167888.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 大数据应用及其解决方案

    大数据应用及其解决方案1大数据概述 1.1.概述 大数据,IT行业的又一次技术变革,大数据的浪潮汹涌而至,对国家治理、企业决策和个人生活都在产生深远的影响,并将成为云计算、物联网之后信息技术产业领域又一重大创新变革。未来的十年将是一个“大数据”引领的智慧科技的时代、随着社交网络的逐渐成熟,移动带宽迅速提升、云计算、物联网应用更加丰富、更多的传感设备、移动终端接入到网络,由此而产生的数据及增长速度将…

    2022年6月2日
    41
  • office2013产品密钥_office365激活密钥

    office2013产品密钥_office365激活密钥HV7BJ-R6GCT-VHBXD-YH4FD-GTH2T87XPX-M3D6G-W4D39-VKVKR-DB8C7HM7R6-FP6QB-XTDC3-MT442-FVPKMXJBYM-62WK4-RCT9Y-XG3HQ-M2CMKHMYY4-TR62Q-9TT76-BDBHK-WPRPTHV7BJ-R6GCT-VHBXD-YH4FD-GTH2Thttp://zhida…

    2022年10月9日
    3
  • GRPC Connection Backoff Protocol「建议收藏」

    GRPC Connection Backoff Protocol「建议收藏」GRPCConnectionBackoffProtocol当我们向一个失败的后端进行连接时,通常不希望立即重试(为了避免请求flooding网络或者服务器),而是去做一些某种形式的指数backoff。我们有几个参数:INITINAL_BACKOFF(第一次失败后的重试需要等待多长时间)MULTIPLIER(在一次失败的重试后,backoff的乘回因子)JITTER(随机backoffs的程度)MAX_BACKOFF(backoff的上界)MIN_CONNECT_TIMEOUT(我们

    2022年6月17日
    34
  • 深度linux iso镜像,深度 Deepin 15 正式版 ISO 镜像下载 – 精美易用适合国人学习的国产 Linux 发行版……「建议收藏」

    深度linux iso镜像,深度 Deepin 15 正式版 ISO 镜像下载 – 精美易用适合国人学习的国产 Linux 发行版……「建议收藏」本帖最后由javy于2016-1-822:06编辑现在除了Windows和Mac之外,越来越多朋友想要学习使用一下Linux系统。不过,国外的诸如CentOS、Ubuntu似乎“专业”了一点,对于新手/普通用户,面向国人的优麒麟或深度操作系统可能更加合适。作为优秀的国产Linux发行版之一,深度Deepin操作系统近年来发展相当迅速,团队投入了十足精力开发和精心设计…

    2022年5月16日
    55
  • 获取图像的宽度、高度

    获取图像的宽度、高度

    2021年9月4日
    63
  • 华为的OD,值得去吗?「建议收藏」

    华为的OD,值得去吗?「建议收藏」最近有不少小伙伴接到了华为OD的面试邀约,但搞不清楚OD到底怎么回事儿,要不要去。所以今天来说说华为的OD到底是怎么回事儿,怎么判断是否值得去。1、华为的OD是怎么回事儿OD,是OutsourcingDispacth的缩写,简单粗暴地讲,就是外包派遣,劳务派遣。基本模式是这样的: A公司是外包公司(或劳务派遣公司,或人力资源公司); A公司签了一堆人,程序…

    2022年7月17日
    119

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号