码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 5247 找连续数【暴力枚举】

时间:2015-06-01 22:37:57      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

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

分析:这道题是2015百度之星初赛1的2题,当时没看这道题

是队友看的,比完以后也做了一下,思路大体都是一样的,就是

暴力枚举,因为k<=1000,那么我们可以每一点x为起点跑[x,x+999]

这段区间,把每得到一段连续的子区间[x,?],则num[len]++(len=size([x,?]));

这样就可以了,最后num数组里就是对应的答案

献上代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<set>
using namespace std;
const int maxn=10000+10;
int num[maxn],sum[maxn];
int main()
{
    int n,m,k,t=0;
    while(~scanf("%d%d",&n,&m))
    {
       // scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
        {
            scanf("%d",&num[i]);
        }
        memset(sum,0,sizeof(sum));
        sum[1]=n;
        for(int i=0;i<n;i++)
        {
            int Min,Max;
            Min=Max=num[i];
            set<int>st;
            st.insert(num[i]);
            for(int j=1;j<1000&&i+j<n;j++)
            {
                st.insert(num[i+j]);
                Min=min(Min,num[i+j]);
                Max=max(Max,num[i+j]);
                if(j+1!=st.size())
                break;
                if(Max-Min==j)
                sum[j+1]++;
            }
        }
        printf("Case #%d:\n",++t);
        while(m--)
        {
            scanf("%d",&k);
            printf("%d\n",sum[k]);
        }
   }
    return 0;
}    


hdu 5247 找连续数【暴力枚举】

标签:

原文地址:http://blog.csdn.net/letterwuyu/article/details/46316177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!