codeforces271D
Good Substrings
给你一个只包含小写字母的字符串s.
问你在这个字符串中有多少个不同的子串.
且要求这些子串中不得出现超过k个的特殊字母.
*子串s1和子串s2不同,当且仅当s1!=s2,即s1和s2完全不同.
*子串指的是字符串中截取出来的连续的一段.
输入格式第一行,一个长度不超过1500仅包含小写字母的字符串s.
第二行,包含一个长度为26的01字符串,如果字符串的第i(0<=i< length(s))个位置为'0',说明'a'+i为特殊字母,否则'a'+i不是特殊字母.
第三行,包含一个整数k(0<=k<=|s|).输出格式只有一个整数,表示符合要求的不同子串的个数样例
ababab
01000000000000000000000000
1
5
acbacbacaa
00000000000000000000000000
2
8
样例解释对于第一个样例,符合要求的子串分别为:"a", "ab", "b", "ba", "bab".
sol:DIV2的D嘛,直接n2暴力搞出所有子串,然后一开始用set去重,T到怀疑人生,然后用哈希,又WA到死
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,m,No[N];
string S,Spe;
bool Bo[];
set<string>Ans;
int main()
{
freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
int i,j;
cin>>S; n=S.size(); S='$'+S;
cin>>Spe; for(i=;i<;i++) if(Spe[i]=='') Bo[i]=;
R(m);
for(i=;i<=n;i++) if(Bo[S[i]-'a']) No[i]=;
for(i=;i<=n;i++) No[i]+=No[i-];
Ans.clear();
for(i=;i<=n;i++) for(j=i;j<=n;j++)
{
if(No[j]-No[i-]>m) break;
else
{
string t; t=S.substr(i,j-i+); Ans.insert(t);
}
}
// set<string>::iterator it;
// for(it=Ans.begin();it!=Ans.end();it++) cout<<*it<<endl;
Wl((int)(Ans.size()));
return ;
}
/*
Input
ababab
01000000000000000000000000
1
Output
5 Input
acbacbacaa
00000000000000000000000000
2
Output
8 input
kqdwdulmgvugvbl
00101010100100100101101110
13
output
114
*/
set(TLE)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
const ll Mod=;
int n,m,Qzh[N];
unsigned long long a[N*N];
char S[N],Sp[];
bool Bo[];
int main()
{
int i,j;
scanf("%s",S+); n=strlen(S+);
scanf("%s",Sp+); for(i=;i<=;i++) if(Sp[i]=='') Bo[i-]=;
R(m);
for(i=;i<=n;i++) {if(Bo[S[i]-'a']) Qzh[i]=; Qzh[i]+=Qzh[i-];}
*a=;
for(i=;i<=n;i++)
{
unsigned long long tmp=;
for(j=i;j<=n;j++)
{
if(Qzh[j]-Qzh[i-]>m) break;
tmp=tmp*Mod+S[j]; a[++*a]=tmp;
}
}
sort(a+,a+*a+);
*a=unique(a+,a+*a+)-a-;
Wl((ll)(*a));
return ;
}
/*
Input
ababab
01000000000000000000000000
1
Output
5 Input
acbacbacaa
00000000000000000000000000
2
Output
8
*/
codeforces271D的更多相关文章
随机推荐
- Ubuntu系统开机后不能正常使用——问题解决记录
1.开机后桌面内容没了,搜狗输入法不能使用了,终端不能打开了 问题原因:上次关机前为了解决解压文件中文乱码问题,在/etc/profile末尾加了如下两行:(但事实上如下两行根本不能解决中文乱码问题) ...
- 搭建自己的框架WedeNet(二)
WedeNet2018.Infrastructure-基础设施层:结构如下: Tools结构如下: 考虑到系统可能会有多个数据上下文(暂时以两个为例),所以根据需要定义两个T4模板用来生成对应的ent ...
- PHP扩展之 Imagick安装
最近的PHP项目中,需要用到切图和缩图的效果,在本地windows开发环境,安装过程遇到好多问题,在此与大家分享. php官网里,一大群老外也看不懂这玩意怎么装,主要原因在于,php版本庞杂,还有x8 ...
- 409 Conflict - PUT https://registry.npm.taobao.org/-/user/org.couchdb.user:zphtown - [conflict] User xxx already exists
解决方法cmd执行 npm config set registry https://registry.npmjs.org/ 为什么,参考此文档:https://blog.csdn.net/adc_go ...
- vue-无限滚动
<ul class="infinite-list" v-infinite-scroll="load" style="overflow:auto& ...
- JS-数值转换
JS数值转换 JS数值转换的方式有4种:Number(),parseInt(),parseFloat(),数据类型*1或者/1. 他们的区别在于: 1.Number():可以将非数值转为数值 如果是B ...
- 简单的todolist的demo
放上代码: <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF ...
- google 高清卫星照片
rel: 如何下载 50 年前自己家乡的高清卫星照片 link: https://zhuanlan.zhihu.com/p/30953275
- <(* ̄▽ ̄*)/低碳生活管理系统
首次在博客园发布文章,都是个人理解,有很多不足,多多包涵. 下面是对做过的作业低碳生活管理系统的剖析: 一:(建类) 二:(在Program[或自己命名的类]里调用SQL命名空间) 三:(Main方法 ...
- kbmMW 5.09测试报告(1)-Scheduler
这个版本除了增加新的SmartBinding功能,同时提供了大量的功能更新以及bug修正.其中,SmartBinding的介绍,xalion已经第一时间写了初识kbmmw 中的smartbind功能, ...