-----

   有时候如果枚举起点超时,那么试试枚举终点。

枚举每一个i为终点(0<= i < n),且维护起点下标startPos

对于终点i,cnt[str[i]] ++,   如果小于等于k的话,那么以i为结尾的符合条件的字串的个数为i-startPos+1

如果大于k的话,改变区间下标startPos, 保证区间startPos-->i内相同字母的个数不超过k

 while(true)
{
cnt[str[startPos]] --;
if(str[startPos] == str[i])
break;
startPos++;
}
startPos++;
 #include <stdio.h>
#include <string.h>
const int N = + ;
typedef __int64 LL;
char str[N];
LL cnt[];
int main()
{
int t, k, i, n, startPos;
scanf("%d",&t);
LL ans;
while(t--)
{
startPos = ;
ans = ;
memset(cnt, , sizeof(cnt));
scanf("%s%d",str,&k);
n = strlen(str);
for(i=; i<n; ++i)
{
cnt[str[i]] ++;
if(cnt[str[i]] <= k)//当右指针往右移动1时,那么子串的个数就会增加,
//这些新增的子字串,都是因为str[i]的加入而形成的,即每个新增子串都有str[i]
//所以新增子串的为str[j->i] startPos<= j <= i, 即新增子串的个数为i-startPos+1
ans += i - startPos + ;
else
{
/*
如果新增一个字符str[i]使得cnt[str[i]] >= k
那么就要从区间[startPos,i)中找一个与str[i]相等的字符str[j]
使得startPos = j;
*/
while(true)
{
cnt[str[startPos]] --;
if(str[startPos] == str[i])
break;
startPos++;
}
startPos++;
ans += i - startPos + ;
}
}
printf("%I64d\n",ans);
}
return ;
}

BestCoder Round#11div2 1003的更多相关文章

  1. 从lca到树链剖分 bestcoder round#45 1003

    bestcoder round#45 1003 题,给定两个点,要我们求这两个点的树上路径所经过的点的权值是否出现过奇数次.如果是一般人,那么就是用lca求树上路径,然后判断是否出现过奇数次(用异或) ...

  2. HDU 5682/BestCoder Round #83 1003 zxa and leaf 二分+树

    zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected ...

  3. BestCoder Round #29 1003 (hdu 5172) GTY's gay friends [线段树 判不同 预处理 好题]

    传送门 GTY's gay friends Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  4. BestCoder Round #87 1003 LCIS[序列DP]

    LCIS  Accepts: 109  Submissions: 775  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: 65536/65 ...

  5. BestCoder Round #75 1003 - King's Order

    国王演讲后士气大增,但此时战争还没有结束,国王时不时要下发命令. 由于国王的口吃并没有治愈,所以传令中可能出现:“让第三军-军-军,到前线去” 这样的命令.由于大洋国在军队中安插了间谍 , 战事紧急, ...

  6. BestCoder Round#8 1003

    dp[i][j] 表示以i结尾的长度为j的递增子序列dp[i][j] = sum(dp[k][j])     k<i && a[i] >a[j]如果只是单纯的循环for(j ...

  7. ACM学习历程—HDU5592 ZYB's Premutation(逆序数 && 树状数组 && 二分)(BestCoder Round #65 1003)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5592 题目大意就是给了每个[1, i]区间逆序对的个数,要求复原原序列. 比赛的时候2B了一发. 首先 ...

  8. BestCoder Round #86 1003

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:有多少个区间里的第 k 大的数不小于 m 解法:尺取法,首先我们用dp[i]保存到i的位置有多 ...

  9. BestCoder Round #47 1003

    solution : 就按题解敲了一遍,好久没写这种dp ;  ;   LL f[MAX][MAX];  ];             scanf(              scanf(,b+); ...

随机推荐

  1. 关于IOCP,某些地方就是不让人彻底舒服(WSASend重叠post数据)

    开门见山,直接就事论事. 假如有这么一个基于IOCP模型的Server,这个Server提供的所有服务中有这么一种服务……文件下载,我们再假设Server端存有一个20G的文件,客户端这时发送一个请求 ...

  2. script:查看历史sql执行信息

    script:查看历史sql执行信息 SELECT *     FROM (SELECT '1.v$sql'||'实例号:'||GV$SQL.inst_id source,               ...

  3. 我们熟悉的Textbox

    创建只读文本框 方法一: 可用Readonly属性防止用户编辑文本框内容.将Readonly属性设置为True后,用户就可以滚动文本框中的文本并将其突出显示,但不能作任何更改.将Readonly属性设 ...

  4. 《深入理解mybatis原理》 MyBatis事务管理机制

    MyBatis作为Java语言的数据库框架,对数据库的事务管理是其很重要的一个方面.本文将讲述MyBatis的事务管理的实现机制. 首先介绍MyBatis的事务Transaction的接口设计以及其不 ...

  5. Swift - 选择框(UIPickerView)的用法

    1,选择框可以让用户以滑动的方式选择值.示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...

  6. mxGraph改变图形大小重置overlay位置

    要在改变图形大小的时候改变overlay的位置.那肯定就要对重置图形大小的方法进行改造了.以下是源文件里的代码 mxGraph.prototype.resizeCells = function(cel ...

  7. Java.util.zip adding a new file overwrites entire jar?(转)

    ZIP and TAR fomats (and the old AR format) allow file append without a full rewrite. However: The Ja ...

  8. BT5 firefox Flash插件问题

    今天在BT下安装了Nessus,好不容易安装好了,注册成功,本以为大功告成,但是在最后关头,却出现一个“未安装flash插件”错误,在bT下尝试着安装flahs插件,蛋碎一地,,,没能解决. 我的BT ...

  9. 什么是Java “实例化”

    实例化:对象也是引用数据类型,只能使用new运算符从堆中分配内存: 使用已经定义好的类,创建该类对象的过程称为“实例化”. 只有先实例化类的对象,才可以访问到类中的成员(属性和方法). 使用成员运算符 ...

  10. Kaggle—Digit Recognizer竞赛

    Digit Recognizer 手写体数字识别  MNIST数据集 本赛 train 42000样例 test 28000样例,原始MNIST是 train 60000 test 10000 我分别 ...