2017 ACM/ICPC Asia Regional Shenyang Online//array array array

来源:互联网 发布:mac用什么浏览器 编辑:程序博客网 时间:2024/05/29 12:54

题目链接:array array array

题意:去除N个数后是否是升序或者降序,是则输出A is a magic array. 不是则输出A is not a magic array;

这里开始想这直接暴力破解应该会超时的,尽管实现出来应该不难,就没有下手,一直想着优化,没想到直接暴力破解就行了。直接码代码吧。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int MAX=100010;int N[MAX],a[MAX],b[MAX];//A是起始序列,a标记的是递增序列,b是递减序列 bool flag;//标记是否符合条件 int main(){    int T,m,n;    scanf("%d",&T);    while(T--)    {        flag = true;        scanf("%d%d",&m,&n);        for(int i=1;i<=m;i++)            scanf("%d",&A[i]);        int maxb=0,maxc=0;        a[1]=b[1]=1;        for(int i=2;i<=m;i++)        {            int tmpb=0,tmpc=0;            for(int j=1;j<=i-1;j++)            {                if(A[j] <= A[i])//递增序列                    tmpb = max(b[j],tmpb);                if(A[j] >= A[i])                    tmpc = max(b[j],tmpc);            }            a[i]=tmpb+1;            b[i]=tmpc+1;            maxb=max(maxb,a[i]);            maxc=max(maxc,b[i]);            if(i - maxb > n && i - maxc > n)            {                flag = false;                break;            }        }        if(flag == false)        {            printf("A is not a magic array.\n");//直接输出             continue;        }        if(maxb+n>=m || maxc+n>=m)//标记需要的数目是否符合            printf("A is a magic array.\n");        else            printf("A is not a magic array.\n");    }    return 0;}

阅读全文
0 0
原创粉丝点击