题解 P1420 【最长连号】

本蒟蒻共发两篇题解都以同样的理由被拒绝了>_<

所以,在仔细阅读了其他同学写的题解后决定认真写一道简单一点的题目的题解

我发现好像很多同学都想得太复杂了

这道题n<=10000,明明o(n)可以跑过,为什么这么复杂呢

首先,暂时不用递归,可能会有些难以理解

#include<bits/stdc++.h>       //神奇头文件不用解释
#define INF 10234567
using namespace std;             //额……@[email protected]
int main()                                //不用递归
{
    int n,s[1001],ans=0,max=-INF;            //n表示输入有n个正整数,ans呢待会解释,max可以不用想了,一定是最后的答案,为什么被赋值为-INF下面解释
    cin>>n;                                               //输入n
    for(int i=1;i<=n;i++)                           //循环了n次
        cin>>s[i];                                    //将数存进s数组里,其实也可以不存,这样会更好理解
    for(int i=1;i<=n;i++)                          //仍旧循环n次,对n个数进行处理
    {                                                         //以下以样例为例来解释代码:10\n3 5 6 2 3 4 5 6 8 9
        if(s[i+1]-s[i]==1)ans++;             //i从1到n,当i=1时s[i+1]表示3后面一个数,即为5,如果5-3==1,就说明3,5是连号,这里显然不是。如果是就将ans++,所以这里的ans只是为了临时存一下连号的个数,以此类推。
        else ans=0;                                  //一旦发现了一次不连号,就将临时存储的数据变为0
        if(ans>max)max=ans;                 //将max赋为-INF的原因是为了找到ans中的最大值,达到题目目的
    }
    cout<<++max;                                  //最后输出最大值
}

好吧,我承认这到比较简单的题目可以有很多解法,然而像我的这种解法的已经有很多了。

我旨在为了和我一样刚入门oi的同学一起分享学习思路,一些想法。

ps:理解万岁,这种简单题目,配上如此详细的解释应该可以理解吧。^_^

原文地址:https://www.cnblogs.com/Douglas-Zhou/p/P1420.html

时间: 2024-08-30 09:22:54

题解 P1420 【最长连号】的相关文章

P1420 最长连号

洛谷——P1420 最长连号 题目描述 输入n个正整数,(1<=n<=10000),要求输出最长的连号的长度.(连号指从小到大连续自然数) 输入输出格式 输入格式: 第一行,一个数n; 第二行,n个正整数,之间用空格隔开. 输出格式: 一个数,最长连号的个数. 输入输出样例 输入样例#1: 10 3 5 6 2 3 4 5 6 8 9 输出样例#1: 5 很显然,这是来搞笑的. 代码: #include<cstdio> #include<cstdlib> #includ

luogu最长连号

https://www.luogu.org/problemnew/show/P1420 100分做法~\(≧▽≦)/~啦啦啦 #include<iostream> #include<cstdio> using namespace std; int a[10001],k,l,n; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]);

循环嵌套-打印不定长特殊*号图形

题目描述 用循环语句打印如下图形.最长一行有n个*号.要求每行的*号用空格隔开,每行最后一个*号后没有空格. * * * * * * … * * * … * … * * * * * * 输入 整数n 输出 最长一行有n个*号的图形,每行*号之间用空格隔开,每行最后一个*号后面没有空格 样例输入 Copy 3 样例输出 Copy * * * * * * * * * 提示 图形分解为上下2个三角,分别进行打印 n=int(input()) i=1 while i<=n: print(" &qu

LintCode题解之最长单词

这些一次遍历搞定的,套路无非都是在遍历的时候就记录数据的状态,然后根据遍历到的当前的数据的状态来修改最终结果,当遍历完了的时候结果也就确定了. public class Solution { /* * @param dictionary: an array of strings * @return: an arraylist of strings */ public List<String> longestWords(String[] dictionary) { int maxLength =

2017ACM省赛选拔赛题解

Problem A: 聪明的田鼠 题解: dp[k][i]表示走了k步,且在第i行的最大值 最后的结果就是走了n+m-2步,且在第n行的值 代码: 1 #include <map> 2 #include <set> 3 #include <cmath> 4 #include <queue> 5 #include <stack> 6 #include <cstdio> 7 #include <string> 8 #inclu

1143: [CTSC2008]祭祀river(最长反链)

1143: [CTSC2008]祭祀river 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1143 Description: 在遥远的东方,有一个神秘的民族,自称Y族.他们世代居住在水面上,奉龙王为神.每逢重大庆典, Y族都会在水面上举办盛大的祭祀活动.我们可以把Y族居住地水系看成一个由岔口和河道组成的网络.每条河道连接着两个岔口,并且水在河道内按照一个固定的方向流动.显然,水系中不会有环流(下图描述一个环流的例子). 由于人数众

【树链剖分】【NOI 2015】【bzoj 4196】软件包管理器

4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 122 Solved: 97 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖(即下载安装这个软件包的安装所依赖的其它软件包),完成所有的配置.Debian/Ubuntu使用的apt-get,Fedora/Ce

线段覆盖、区间选点、区间覆盖贪心讲解

一.贪心引入: 最少硬币 有1.2.5.10.20.50.100七种面值的硬币,要支付指定的金额,问怎么支付所用的硬币个数最少. 这是一个非常日常化的问题,马上我们会想到,尽可能先用大面值的硬币,就能使支付的硬币尽可能少.这就是“贪心选择”. 二.贪心——线段覆盖 题目 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动.现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问

bzoj2595 [Wc2008]游览计划

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2595 [题解] 斯坦纳树模板题.学了一发斯坦纳树. 对于一般的斯坦纳树,是 给出一些点和一些关键点和边,要求选择权值和最小的连通块使得关键点连通. 那么一般我们用f(x,status)表示在x,状态为status的最小权值和. 本题我们采用f(i,j,status)表示在(i,j),状态为status的最小权值和. 一开始权值就是题目给的,如果是景点那么在对应的标号的status赋值即可.