• HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749

    题目大意:给一个原序列N,再给出一个序列M,问从N中一共可以找出多少个长度为m的序列,序列中的数的相对大小关系与序列M中相对大小关系相同。(序列之间不能重叠)

    解题思路:从头开始以i为起点暴搜,不断找长度为m的序列,判断是否满足条件。若满足,跳到i+m之后继续搜,若不满足,向后移一位继续搜。

    判断方法压缩数据比较相对大小。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 int N[100005],M[100005];
     6 int n,m,k,all;
     7 int to[26],y[26];
     8 bool judge(int start)
     9 {
    10     memset(to,0,sizeof(to));
    11     memset(y,0,sizeof(y));
    12     int i,j,l,MM;
    13     MM=0;
    14     for(i=start,j=0;i<m+start;i++,j++)
    15     {
    16         if(to[N[i]]==0&&y[M[j]]==0)
    17         {
    18             to[N[i]]=M[j];
    19             y[M[j]]=N[i];
    20             if(MM<M[j])MM=M[j];
    21             for(l=M[j]-1;l>=0;l--)
    22             {
    23                 if(y[l]){
    24                 if(y[l]>N[i])
    25                 {
    26                     return false;
    27                 }
    28                 break;
    29                 }
    30             }
    31             for(l=M[j]+1;l<=MM;l++)
    32             {
    33                 if(y[l])
    34                 {
    35                     if(y[l]<N[i])
    36                         return false;
    37                     break;
    38                 }
    39             }
    40         }
    41         else
    42         {
    43             if(!y[M[j]]||!to[N[i]])
    44                 return false;
    45             if(N[i]!=y[M[j]]||M[j]!=to[N[i]])
    46                 return false;
    47         }
    48     }
    49     return true;
    50 }
    51 int main()
    52 {
    53     int i;
    54     while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    55     {
    56         all=0;
    57         for(i=0;i<n;i++)
    58             scanf("%d",&N[i]);
    59         for(i=0;i<m;i++)
    60             scanf("%d",&M[i]);
    61         for(i=0;i<=n-m;i++)
    62         {
    63             if(judge(i))
    64             {
    65                 all++;
    66                 i+=m-1;
    67             }
    68         }
    69         printf("%d
    ",all);
    70     }
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    ES学习(十)
    ES学习(九)
    ES学习(八)
    ES学习(七)--documentAPI
    ES学习(六)--shard和replica机制
    ES学习(四)--嵌套聚合、下钻分析、聚合分析
    uniapp中常见的请求方法封装 --来之插件市场(全局方法封装(请求/正则/URI)
    工具/插件
    express中文件的上传 multer
    express中开发常用
  • 原文地址:https://www.cnblogs.com/wuwing/p/3332367.html
Copyright © 2020-2023  润新知