【HDOJ 5056】 Boring count (排列组合)
来源:互联网 发布:android淘宝分类菜单 编辑:程序博客网 时间:2024/06/05 14:31
【HDOJ 5056】 Boring count (排列组合)
我的做法是两个指针 一个指向最后匹配好的字符的后一位 一个沿字符串遍历 开个数组标记每个字母出现过的次数 当遍历到某个字母 出现次数>k时 从j往后找j后面第一次出现该字符的位置 可知从此位置往前的字符都无法遍历到当前的i 因此把此位置及之前与i之前能组成的子串统计一下 这样不断的遍历 最后输出即为答案
代码如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <queue>using namespace std;#define ll long longint num[26];char str[100002];int main(){ int t,k,i,j,id; ll sum; int ch; scanf("%d",&t); while(t--) { memset(num,0,sizeof(num)); scanf("%s %d",str,&k); sum = 0; id = 0; for(i = 0; str[i]; ++i) { ch = str[i]-'a'; num[ch]++; if(num[ch] > k) { j = id; num[ch]--; while(str[id] != ch+'a') { num[str[id]-'a']--; id++; } sum = sum+(ll)(i-j)*(i-j+1)/2-(ll)(i-id-1)*(i-id)/2;(统计由从j到j之后第一次出现该字符的这些字符为首的子串个数) id++; } } sum += (ll)(i-id)*(i-id+1)/2;//累计上最后的子串 printf("%I64d\n",sum); } return 0;}
0 0
- 【HDOJ 5056】 Boring count (排列组合)
- hdoj-5056-Boring count
- 【BestCoder】 HDOJ 5056 Boring count
- HDU 5056 - Boring count
- HUD 5056 Boring count
- hdu 5056Boring count
- hdu 5056 Boring count
- hdu 5056 Boring count
- HDU 5056Boring count
- HDU 5056 Boring Count --统计
- [周赛] HDU-5056 Boring count
- HDU 5056 Boring count(窗口滑动法)
- HDU 5056 Boring count(贪心)
- HDU 5056 Boring count(数学)
- hdu 5056 Boring count ( 窗口转移法)
- hdu 5056 Boring count (窗口滑动)
- hdu 5056 Boring count(尺取法)
- HDU 5056 Boring count(滑动窗口)
- python 2.4 pywin32 下载地址:
- UVA - 10816 Travel in Desert(枚举+生成树+最短路)
- POJ2010--Moo University-Financial Aid(二分)
- CSS/DIV
- [MDI]MDI框架下 获得每个子框架下的任意View的Menu菜单
- 【HDOJ 5056】 Boring count (排列组合)
- WPF DataGrid 绑定 DataTable
- 在win64下安装elipse+pythonDev
- BAT三巨头:不看星座看地域
- 近期开发小点记录
- java面试需要注意的面试题
- 黑马程序员----IO流
- uva 247 Calling Circles(fioyd传递闭包和DFS)
- UVA - 11354 Bond(生成树+LCA)