Good Substrings

CodeForces - 271D

给你一个只包含小写字母的字符串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|).输出格式只有一个整数,表示符合要求的不同子串的个数样例

样例输入1
ababab
01000000000000000000000000
1
样例输出1
5
样例输入2
acbacbacaa
00000000000000000000000000
2
样例输出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的更多相关文章

随机推荐

  1. the specified service is marked as deletion,can not find the file specified

    使用命令注册windows service sc create CCGSQueueService binpath= "D:\DKX4003\services\xxx.xx.xx\xxx.ex ...

  2. 浅谈JMX

    JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构.设计模式.应用程序接口以及服务.通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存.重新加载配置文件等 优点是可 ...

  3. 大数据学习(2)- export、source(附带多个服务器一起启动服务器)

    linux环境中, A=1这种命名方式,变量作用域为当前线程 export命令出的变量作用域是当前进程及其子进程. 可以通过source 脚本,将脚本里面的变量放在当前进程中 附带自己写的tomcat ...

  4. Android获取网络时间的方法

    一.通过免费或者收费的API接口获取 1.免费 QQ:http://cgi.im.qq.com/cgi-bin/cgi_svrtime 淘宝:http://api.m.taobao.com/rest/ ...

  5. 【原创】大数据基础之Kudu(6)kudu tserver内存占用统计分析

    kudu tserver占用内存过高后会拒绝部分写请求,日志如下: 19/06/01 13:34:12 INFO AsyncKuduClient: Invalidating location 34b1 ...

  6. Pytorch中nn.Dropout2d的作用

    Pytorch中nn.Dropout2d的作用 首先,关于Dropout方法,这篇博文有详细的介绍.简单来说, 我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更 ...

  7. vue-cli 3.0不能用module.exports为undefined,导致第三方js都没有办法引用

    新的 vue-cli 默认禁止了 commonjs 语法可以添加 babel 插件解决 yarn add @babel/plugin-transform-modules-commonjs -D 或 n ...

  8. MYSQL 修改语句(数据)

    修改数据(UPDATE)     如果你失忆了,希望你能想起曾经为了追求梦想的你.     我们玩QQ.微信.淘宝等等,都会有一个操作:修改信息   淘宝常用的嘛,新增了收货地址,也可以修改它,微信/ ...

  9. Python—selenium模块(浏览器自动化工具)

    selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件 安装方法: pip install selen ...

  10. mybatis-04【小结】

    mybatis-04[小结] 1.Mybatis 中 # 和 $ 的区别?#相当于对数据 加上 双引号,$相当于直接显示数据1)#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号. 如:o ...