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

hdu 5672 尺取还是挺好用的

时间:2016-08-01 21:19:57      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

先简单介绍下尺取法

http://blog.chinaunix.net/uid-24922718-id-4848418.html

尺取法就是在卡给定条件的时候 不断的改变下标 起点 终点

#include<cstdio>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
int t,k,j,vis[27];
char a[1000005];
cin>>t;
while(t--)
{
scanf("%s",&a);
scanf("%d",&k);
int l=0,temp,num=0,i=0;
long long int ans=0;
memset(vis,0,sizeof(vis));
int len=strlen(a);
while(l<=i&&l<len)
{
while(i<len&&num<k)// 这一步是控制终点
{
temp=a[i++]-‘a‘;
if(vis[temp]==0) num++;
vis[temp]++;
}
if(num<k) break;
ans+=(len-i+1);
temp=a[l]-‘a‘;//后面的处理是把起点慢慢的向前挪
vis[temp]--;
if(vis[temp]==0) num--;
l++;
}
printf("%I64d\n",ans);
}
return 0;
}

最后就这道题目来说说吧 两个点吧

1.这里的要求是不同的字母数 可以用标记数组实现(注意在挪起点的时候 要对标记数组进行处理)

2.题目要求的是所有subquence的个数那么 在爬出最简单的时候 后面的一些就是需要增加的

hdu 5672 尺取还是挺好用的

标签:

原文地址:http://www.cnblogs.com/z1141000271/p/5727102.html

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