• 第三届蓝桥杯省赛---连号区间数


    连号区间数
    小明这些天一直在思考这样一个奇怪而有趣的问题:
    在1~N的某个全排列中有多少个连号区间呢?这里所说的连号区间的定义是:
    如果区间[L, R] 里的所有元素(即此排列的第L个到第R个元素)递增排序后能得到一个长度为R-L+1的“连续”数列,则称这个区间连号区间。
    当N很小的时候,小明可以很快地算出答案,但是当N变大的时候,问题就不是那么简单了,现在小明需要你的帮助。
    输入格式:
    第一行是一个正整数N (1 <= N <= 50000), 表示全排列的规模。
    第二行是N个不同的数字Pi(1 <= Pi <= N), 表示这N个数字的某一全排列。
    输出格式:
    输出一个整数,表示不同连号区间的数目。
    示例:
    用户输入:
    4
    3 2 4 1
    程序应输出:
    7
    用户输入:
    5
    3 4 2 5 1
    程序应输出:
    9
    解释:
    第一个用例中,有7个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [2,2], [3,3], [4,4]
    第二个用例中,有9个连号区间分别是:[1,1], [1,2], [1,3], [1,4], [1,5], [2,2], [3,3], [4,4], [5,5]
    资源约定:
    峰值内存消耗 < 64M
    CPU消耗 < 5000ms

    分析: 读懂题意,直接暴力就可以。。。主要理解区间号的意思,当一个区间中最大值与最小值的差等于两区间长度-1(即区间在原数组的断电位置相减)

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int maxn = 5e4+10;
     6 #define INF 0x3f3f3f3f
     7 int a[maxn];
     8 
     9 int main(int argc, char const *argv[])
    10 {
    11     int n;
    12     cin>>n;
    13     int ans=0;
    14     for( int i=1; i<=n; i++ ){
    15         cin>>a[i];
    16     }
    17     for( int i=1; i<=n; i++ ){
    18         int maxi = a[i];
    19         int mini = a[i];
    20         for( int j=i; j<=n; j++ ){
    21             if(maxi<a[j]) maxi=a[j];
    22             if(mini>a[j]) mini=a[j];
    23             if(maxi-mini==j-i) ans++;
    24         }
    25     }
    26     cout<<ans<<endl;
    27     return 0;
    28 }
    有些目标看似很遥远,但只要付出足够多的努力,这一切总有可能实现!
  • 相关阅读:
    log.count/logrt.count/log/logrt
    datetime
    差集交集
    pandas 空df对象判断
    pyinstaller
    pysimplegui
    vi编辑实用命令
    hadoop实用命令
    查找redis安装目录
    spark streaming 读取kafka数据保存到parquet文件,redis存储offset
  • 原文地址:https://www.cnblogs.com/Bravewtz/p/10432645.html
Copyright © 2020-2023  润新知