zoukankan      html  css  js  c++  java
  • 看试卷

    题目描述

    在一次考试之后,作为班主任的T老师需要给n个学生改卷子,T老师有个习惯,就是按学号的先后来看卷子,所以T老师每次看卷子之前都需要给卷子排好先后次序再改。
    但是因为T老师的空闲时间很短,所以他想尽量把这个排序的任务分成多次来做。因此他请你将卷子分成一小叠一小叠的(但不打乱卷子现有顺序),使得她只需要对每一叠分别排序,就能将整堆卷子排序。
    初始的卷子次序为a[i],请问你最多能把卷子分成多少小叠。
    保证卷子上面的学号为0...n-1的一个排列。

    输入

    第一行一个数n;
    第二行n个数表示a[i],以空格隔开。

    输出

    输出一个数,表示最多分出多少叠卷子。

    样例输入

    5 
    4 3 2 1 0
    

    样例输出

    1
    

    提示

    将卷子分成2叠或者更多块,都无法得到所需的结果。
    例如,分成 [4, 3], [2, 1, 0] ,排序得到的结果是 [3, 4, 0, 1, 2],这不是有序的数组。

    对于20%的数据,1≤n≤20;
    对于53%的数据,1≤n≤1000;
    对于60%的数据,1≤n≤2000;
    对于100%的数据,1≤n≤100000。

    代码

    //#pragma GCC optimize(3)
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<climits>
    #include<queue>
    #include<set>
    #include<stack>
    #define max(x,y) ((x)>(y)?(x):(y))
    #define min(x,y) ((x)<(y)?(x):(y))
    #define swap(x,y) (x^=y,y^=x,x^=y)
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    const int mod=1e9+7;
    int a[N];
    stack<int>st;
    template<typename T>inline void read(T &x)
    {
        x=0;
        T f=1;
        char c=getchar();
        for(; c<'0'||c>'9'; c=getchar()) if(c=='-') f=-1;
        for(; c>='0'&&c<='9'; c=getchar()) x=(x<<1)+(x<<3)+(c&15);
    }
    template<typename T>inline void print(T x)
    {
        if(x<0) putchar('-'),x*=-1;
        if(x>=10) print(x/10);
        putchar(x%10+'0');
    }
    int main()
    {
        int n;
        read(n);
        for(int i=0;i<n;i++)
            read(a[i]);
        int minn=0,maxn=0;
        int mina=INT_MAX,maxa=0;
        int cnt=0,num=0,toj=0;
        for(int i=0;i<n;i++)
        {
            maxn=i;
            maxa=max(maxa,a[i]);
            mina=min(mina,a[i]);
            num++;
            if(mina==minn&&maxa==maxn)
            {
                cnt++;
                toj+=num;
                num=0;
                minn=i+1;
                mina=INT_MAX;
            }
     
        }
        if(toj==n){
            print(cnt);
            cout<<endl;}
        else
            cout<<1<<endl;
    }
    

    思路

    模拟栈。

  • 相关阅读:
    Some Depth Theory
    Hom和$otimes$如何把我绕晕
    A natrual way to introduce homotopy groups
    指数多项式的Galois群计算
    Trianglated Category and Derived Categories
    最近的代数课上的一些灵魂提问
    致青年朋友的一封信 莫洛亚
    一个函数证明题
    游客的故事
    14. 运算符重载(二)
  • 原文地址:https://www.cnblogs.com/xxffxx/p/11795124.html
Copyright © 2011-2022 走看看