HDOJ 4749 - Parade Show 思维...贪心...

原创 2013年09月21日 20:57:54

              题意:

                      现在给出了一列数..再给出了一列参照数列..参照数列的意思是其每个数代表一个高度..而大小关系同样也满足..现在问可以将所给的一列数分割成多少个和满足参照数列的数列...

              题解:

                      注意的是参照数列的每个数只为(1~25)....所以可以用25个vector记录当前参照数列那个数在哪些位置出现过..那么在枚举起点进行判断时..先判断所有应该相同的数是否相同..再比较大小关系是否满足...

                      值得注意的是本题是满足贪心的..比如从1开始可以匹配过去..从2开始也可以..那么选择从1开始的会给后面的留出更多的选择。这个意思就是从第一个数开始枚举起点..当找到了一个后..枚举起点的指针立马就跳到匹配完的后面一个位置继续匹配...


Program:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdlib>
#include<stack>
#include<map>
#define MAXN 100005
#define MAXM 1000505
#define ll long long 
#define eps 1e-10
using namespace std;  
int a[MAXN],d[30];
vector<int> T[30];
bool ok(int t,int m,int k)
{
    int i,p;
    memset(d,0,sizeof(d));
    for (p=1;p<=k;p++)
       for (i=0;i<T[p].size();i++)
       {
               if (!i) d[p]=a[t+T[p][i]];
               else
               if (a[t+T[p][i]]!=d[p]) return false;
       }
    for (i=1;i<k;i++)
       if (d[i] && d[i+1])
          if (d[i]>=d[i+1]) return false;
    return true;
}
int main()
{ 
    int n,m,k,x,i,t,num; 
    while(~scanf("%d%d%d",&n,&m,&k))
    {  
             for (i=1;i<=n;i++) scanf("%d",&a[i]);
             for (i=1;i<=k;i++) T[i].clear();
             for (i=0;i<m;i++) scanf("%d",&x),T[x].push_back(i);    
             num=0;
             for (t=1;t<=n-m+1;t++)
                 if (ok(t,m,k)) t+=m-1,num++;
             printf("%d\n",num);             
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kk303/article/details/11880643

HDOJ 题目 4749 Parade Show(KMP)

Parade Show Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Tota...
  • yu_ch_sh
  • yu_ch_sh
  • 2015-08-24 10:11:47
  • 339

hdu 4749 Parade Show KMP

题目意思,给你两个串,让你求出第一个串中有多少个紫串,这个子串和第二个串满足:任意一个数字在其中的相对位置都一样。 串与串不能重叠,求最多有多少个。 其实就是给你一个文本串一个模式串求有多少个匹配...
  • t1019256391
  • t1019256391
  • 2013-10-07 02:25:02
  • 1449

HDU 4749 Parade Show Kmp

HDU 4749 Parade Show Kmp
  • NNDXNM
  • NNDXNM
  • 2015-04-11 16:16:12
  • 453

HDU 4749 Parade Show(KMP)

Parade Show Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) To...
  • u011217342
  • u011217342
  • 2014-03-17 18:09:42
  • 858

hdu 4749 Parade Show(KMP)

题目链接:Parade Show 题目大意:学校要举办一场典礼,要从n个学生中选若干支队伍来,每支队伍有m个人。然后现在将学生的身高划分成k个等级,接着按照学生的顺序给出学生的身高等级,再然后,...
  • u011328934
  • u011328934
  • 2014-03-16 21:29:06
  • 1010

hdu 4749 Parade Show ( kmp )

hdu 4749 Parade Show ( kmp ) 题意:给出两个数列(可以看成串),问最多能在串1中找出几个不重叠的substring,使得这些substring的元素的相对大小关系与串2相...
  • No__stop
  • No__stop
  • 2013-09-23 20:15:44
  • 1513

hdoj4864 Task (贪心)

题目来源: 2014 Multi-University Training Contest 1--by FZU 题意:有N个机器和m个工作,机器和工作都有一个时间xi和价值yi,一个工作只有满足x...
  • y990041769
  • y990041769
  • 2014-07-23 10:17:35
  • 1141

HDU 4749 Parade Show 数据结构KMP变形

Parade Show Every student has its own number, from 1 to n. (1
  • fans_ac
  • fans_ac
  • 2016-07-23 12:20:30
  • 166

HDU 4749 Parade Show(KMP变形)

题意:有一个文本数列,问可以匹配多少个模式数列(不允许重叠),但这里的“匹配”是这样定义:满足大小关系即可,比如(2,4,4,1)和(33,57,57,2)匹配 思路:明显可以把文本数列和模式数列处...
  • kalilili
  • kalilili
  • 2015-03-26 13:00:38
  • 803

HDU 4749 Parade Show(暴力水果)

HDU 4749 Parade Show(暴力水果)
  • u012860063
  • u012860063
  • 2014-10-21 21:46:08
  • 1072
收藏助手
不良信息举报
您举报文章:HDOJ 4749 - Parade Show 思维...贪心...
举报原因:
原因补充:

(最多只允许输入30个字)