hdu 5672 尺取还是挺好用的

先简单介绍下尺取法

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的个数那么 在爬出最简单的时候 后面的一些就是需要增加的

时间: 2024-12-24 09:44:48

hdu 5672 尺取还是挺好用的的相关文章

HDU 5289 尺取

Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 4316    Accepted Submission(s): 1984 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered f

【尺取】HDU String

http://acm.hdu.edu.cn/showproblem.php?pid=5672 [题意] 给定一个小写英语字母组成的字符串,求这个字符串一共包含多少个至少有m个不同字母的连续子序列 [思路] 尺取. 我们发现,如果i~j是恰好含有k个字母的区间,那么对于k(j<k<=n),i~k是含有至少k个不同字母的子串,那么对于每一个左边界,我们都可以找到一个最小的右边界,使得这个区间恰好含有k个字母,然后统计以这个左边界符合条件的子串个数,找到右边界,用尺取法即可. [Accepted]

【尺取】HDU Problem Killer

acm.hdu.edu.cn/showproblem.php?pid=5328 [题意] 给定一个长度为n的正整数序列,选出一个连续子序列,这个子序列是等差数列或者等比数列,问这样的连续子序列最长是多少? [思路] 尺取,用来解决这样的问题:需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 分别用双指针找最长的等差数列和等比数列,找最大值就可以了. 注意a 或者 a b既是等差数列,又是等比数列. [Accepted] 1 #include <iostream>

hdu 6119 小小粉丝度度熊 (区间处理+尺取)

http://acm.hdu.edu.cn/showproblem.php?pid=6119 解题思路:给出的出发时间和结束时间对有重合的部分进行处理,然后用尺取法找出最后的结果.比赛的时候的确想到了用尺取的想法完成题目,但是代码能力不行没有想出来. AC代码: 1 #include <iostream> 2 #include <bits/stdc++.h> 3 using namespace std; 4 const int maxn=100005; 5 struct node

hdu 4123 Bob’s Race 树的直径+rmq+尺取

Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description Bob wants to hold a race to encourage people to do sports. He has got trouble in choosing the route. There are N houses and N - 1 roads

HDU 5806 NanoApe Loves Sequence Ⅱ(尺取+思维)——BestCoder Round #86 1003

传送门 NanoApe Loves Sequence Ⅱ Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 514    Accepted Submission(s): 248 Problem Description NanoApe, the Retired Dog, has returned back to prepare for f

hdu 6231 -- K-th Number(二分+尺取)

题目链接 Problem Description Alice are given an array A[1..N] with N numbers. Now Alice want to build an array B by a parameter K as following rules: Initially, the array B is empty. Consider each interval in array A. If the length of this interval is le

HDU 5178 pairs【二分】||【尺取】

<题目链接> 题目大意: 给定一个整数序列,求出绝对值小于等于k的有序对个数. 解题分析: $O(nlong(n))$的二分很好写,这里就不解释了.本题尺取$O(n)$也能做,并且效率很不错. 尺取: #include <bits/stdc++.h> using namespace std; int arr[int(1e5+5)]; int main(){ int T,n,k;scanf("%d",&T); while(T--){ scanf("

HDU 1565 方格取数(1) (状态压缩DP)

HDU 1565 方格取数(1) (状态压缩DP) ACM 题目地址: HDU 1565 方格取数(1) 题意: 中文. 分析: dp[i][j]表示前i行状态j的最优解. 先预处理出符合条件的数,17000+个(n在20以内). 不过感觉复杂度挺高的会T,但是却能A. 这题的正解应该是最小割,回头补下. 代码: /* * Author: illuz <iilluzen[at]gmail.com> * File: 1565_dp.cpp * Create Date: 2014-09-19 23